Kumaha MySQL nyegah suntikan sql? Prinsip suntik SQL sareng pencegahan

MySQLKumaha carana nyegah suntik sql? Prinsip suntik SQL sareng pencegahan

MySQL sareng suntikan SQL

Upami anjeun nyandak data anu diasupkeun ku pangguna ngalangkungan halaman wéb teras selapkeun kana adatabase MySQL, teras meureun aya masalah kaamanan suntik SQL.

Bab ieu bakal ngenalkeun anjeun kumaha nyegah suntikan SQL sareng nganggo skrip pikeun nyaring karakter anu disuntik dina SQL.

Nu disebut injeksi SQL nyaéta nipu server sangkan ngaéksekusi paréntah SQL jahat ku inserting paréntah SQL kana formulir web pikeun ngirimkeun atawa input string query tina ngaran domain atawa pamundut kaca.

Urang kedah henteu percanten kana input pangguna, urang kedah nganggap yén data input pangguna henteu aman, sareng urang sadayana kedah nyaring data input pangguna.

Dina conto di handap ieu, ngaran pamaké nu diasupkeun kudu kombinasi hurup, angka, jeung garis handap, sarta ngaran pamaké kudu antara 8 jeung 20 karakter panjangna:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Hayu urang tingali kaayaan SQL anu lumangsung nalika henteu aya karakter khusus anu disaring:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Dina pernyataan suntik di luhur, kami henteu nyaring variabel $ ngaran. Pernyataan SQL anu kami henteu peryogi diselapkeun kana $ nami, anu bakal ngahapus sadaya data dina méja pangguna.

mysqli_query () dina PHP teu diwenangkeun pikeun ngaéksekusi sababaraha pernyataan SQL, tapi SQLite na PostgreSQL tiasa ngaéksekusi sababaraha pernyataan SQL dina waktos anu sareng, jadi urang kudu mastikeun mastikeun data pamaké ieu.

Pikeun nyegah suntikan SQL, urang kedah nengetan titik-titik ieu:

  • 1. Pernah percanten input pamaké.Pariksa input pangguna, anjeun tiasa nganggo ekspresi biasa, atanapi ngawatesan panjangna; ngarobah tanda petik tunggal sareng ganda "-", jsb.
  • 2. Pernah make sql assembly dinamis, anjeun tiasa nganggo sql parameterized atawa langsung ngagunakeun prosedur disimpen pikeun query data sarta aksés.
  • 3. Pernah make sambungan database kalawan hak husus administrator, make sambungan database misah kalawan hak husus kawates pikeun tiap aplikasi.
  • 4. Ulah nyimpen informasi rahasia langsung, encrypt atanapi Hash kaluar kecap akses jeung informasi sénsitip.
  • 5. Inpormasi pangecualian tina aplikasi kedah masihan sakedik petunjuk sabisa, sareng langkung saé ngagunakeun inpormasi kasalahan khusus pikeun ngabungkus inpormasi kasalahan asli.
  • 6. Metodeu deteksi sql suntik umumna adopts bantu软件Atanapi platform wéb pikeun ngadeteksi, parangkat lunak umumna nganggo alat deteksi sql suntik jsky, platform halaman wéb ngagaduhan alat deteksi platform kaamanan halaman wéb Yisi. MDCOFT SCAN et al.Ngagunakeun MDCOFT-IPS sacara efektif tiasa ngabela ngalawan suntikan SQL, serangan XSS, jsb.

Nyegah SQL Injection

Dina basa skrip sapertos Perl sareng PHP anjeun tiasa kabur data anu diasupkeun ku pangguna pikeun nyegah suntikan SQL.

Ekstensi MySQL pikeun PHP nyayogikeun fungsi mysqli_real_escape_string () pikeun ngémutan karakter input khusus.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Suntikan dina Pernyataan Kawas

Nalika naroskeun sapertos, upami pangguna ngalebetkeun nilai "_" sareng "%", ieu bakal kajantenan: pangguna tadina hoyong naroskeun "abcd_", tapi hasil pamundut kalebet "abcd_", "abcde", sareng "abcdf "Jsb.; masalahna ogé lumangsung nalika pangguna hoyong naroskeun "30%" (catetan: tilu puluh persén).

Dina skrip PHP urang tiasa nganggo fungsi addcslashes () pikeun nanganan kaayaan di luhur, sapertos dina conto ieu:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

The addcslashes () fungsi nambahkeun backslash saméméh karakter dieusian.

Format sintaksis:

addcslashes(string,characters)
parameterkaterangan
taliDibutuhkeun.Nangtukeun string pikeun dipariksa.
aksaraPilihan.Nangtukeun karakter atawa rentang karakter kapangaruhan ku addcslashes ().

Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) dibagikeun "Kumaha MySQL nyegah suntik sql? prinsip suntik sql sareng pencegahan", éta bakal ngabantosan anjeun.

Wilujeng ngabagikeun tautan artikel ieu:https://www.chenweiliang.com/cwl-500.html

Wilujeng sumping di saluran Telegram blog Chen Weiliang pikeun kéngingkeun apdet panganyarna!

🔔 Janten anu pangheulana kéngingkeun "Panduan Penggunaan Alat AI Pemasaran Konten ChatGPT" dina diréktori luhur saluran! 🌟
📚 Pituduh ieu ngandung nilai anu ageung, 🌟Ieu mangrupikeun kasempetan anu jarang, tong kantun! ⏰⌛💨
Bagikeun sareng suka upami anjeun resep!
Bagikeun sareng resep anjeun mangrupikeun motivasi kontinyu kami!

 

koméntar

Alamat email anjeun moal diterbitkeun. Widang anu diperyogikeun dianggo * Labél

gulung ka luhur