Kepiye MySQL nyegah injeksi sql? Prinsip injeksi SQL lan pencegahan

MySQLKepiye cara nyegah injeksi sql? Prinsip injeksi SQL lan pencegahan

MySQL lan injeksi SQL

Yen sampeyan njupuk data sing dilebokake pangguna liwat kaca web lan lebokake menyang adatabase MySQL, banjur ana masalah keamanan injeksi SQL.

Bab iki bakal ngenalake sampeyan carane nyegah injeksi SQL lan nggunakake skrip kanggo nyaring karakter sing disuntikake ing SQL.

Sing diarani injeksi SQL yaiku ngapusi server kanggo nglakokake perintah SQL sing ala kanthi nglebokake perintah SQL menyang formulir web kanggo ngirim utawa input string query saka jeneng domain utawa panyuwunan kaca.

Kita kudu ora percaya input pangguna, kita kudu nganggep manawa data input pangguna ora aman, lan kita kabeh kudu nyaring data input pangguna.

Ing conto ing ngisor iki, jeneng pangguna sing dilebokake kudu kombinasi huruf, angka, lan garis ngisor, lan jeneng pangguna kudu dawane 8 nganti 20 karakter:

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

Ayo goleki kahanan SQL sing kedadeyan nalika ora ana karakter khusus sing disaring:

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

Ing statement injeksi ing ndhuwur, kita ora nyaring variabel $ jeneng. Pernyataan SQL sing ora dibutuhake dilebokake ing $ jeneng, sing bakal mbusak kabeh data ing tabel pangguna.

mysqli_query () ing PHP ora diijini kanggo nglakokaké sawetara statements SQL, nanging SQLite lan PostgreSQL bisa nglakokaké sawetara statements SQL ing wektu sing padha, supaya kita kudu strictly verifikasi data pangguna iki.

Kanggo nyegah injeksi SQL, kita kudu menehi perhatian marang poin ing ngisor iki:

  • 1. Aja dipercaya input pangguna.Priksa input pangguna, sampeyan bisa nggunakake ekspresi reguler, utawa matesi dawa; Ngonversi kuotasi siji lan pindho "-", etc.
  • 2. Aja nggunakake sql perakitan dinamis, sampeyan bisa nggunakake sql parameterized utawa langsung nggunakake tata cara disimpen kanggo query data lan akses.
  • 3. Aja nggunakake sambungan database karo hak istimewa administrator, nggunakake sambungan database kapisah karo hak istimewa winates kanggo saben aplikasi.
  • 4. Aja nyimpen informasi rahasia langsung, encrypt utawa hash metu sandhi lan informasi sensitif.
  • 5. Informasi pangecualian saka aplikasi kudu menehi sawetara pitunjuk sabisa, lan paling apik nggunakake informasi kesalahan adat kanggo mbungkus informasi kesalahan asli
  • 6. Cara deteksi injeksi sql umume nganggo tambahan软件Utawa platform situs web kanggo ndeteksi, piranti lunak umume nggunakake alat deteksi injeksi sql jsky, platform situs web duwe alat deteksi platform keamanan situs web Yisi. MDCOFT SCAN et al.Nggunakake MDCOFT-IPS kanthi efektif bisa nglindhungi injeksi SQL, serangan XSS, lsp.

Nyegah SQL Injection

Ing basa skrip kayata Perl lan PHP, sampeyan bisa uwal saka data sing dilebokake pangguna kanggo nyegah injeksi SQL.

Ekstensi MySQL kanggo PHP nyedhiyakake mysqli_real_escape_string() fungsi kanggo uwal 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}'");

Injeksi ing Kaya Pranyatan

Nalika takon kaya, yen pangguna ngetik nilai kanthi "_" lan "%", iki bakal kelakon: pangguna asline pengin takon "abcd_", nanging asil pitakon kalebu "abcd_", "abcde", lan "abcdf " Etc.; masalah uga ana nalika pangguna pengin takon "30%" (cathetan: telung puluh persen).

Ing skrip PHP, kita bisa nggunakake fungsi addcslashes () kanggo nangani kahanan ing ndhuwur, kaya ing conto ing ngisor iki:

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

Fungsi addcslashes() nambahake garis miring mundur sadurunge karakter sing ditemtokake.

Format sintaksis:

addcslashes(string,characters)
ParamèterGambar
senardibutuhake.Nemtokake senar kanggo mriksa.
karakterOpsional.Nemtokake karakter utawa sawetara karakter kena pengaruh addcslashes ().

Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) bareng "Kepiye MySQL nyegah injeksi sql? prinsip injeksi sql lan pencegahan", bakal mbantu sampeyan.

Sugeng rawuh kanggo nuduhake link artikel iki:https://www.chenweiliang.com/cwl-500.html

Sugeng rawuh ing saluran Telegram blog Chen Weiliang kanggo entuk update paling anyar!

🔔 Dadi sing pertama entuk "Pandhuan Panggunaan Alat AI Pemasaran Konten ChatGPT" ing direktori ndhuwur saluran! 🌟
📚 Pandhuan iki ngemot nilai gedhe, 🌟Iki minangka kesempatan langka, aja kantun! ⏰⌛💨
Share lan seneng yen sampeyan seneng!
Nuduhake lan seneng sampeyan minangka motivasi terus-terusan!

 

komentar

Alamat email sampeyan ora bakal diterbitake. Bidhang sing dibutuhake digunakake * Panggilan

gulung menyang ndhuwur