Nola saihesten du MySQL-k sql injekzioa? SQL injekzio printzipioa eta prebentzioa

MySQLNola saihestu sql injekzioa? SQL injekzio printzipioa eta prebentzioa

MySQL eta SQL injekzioa

Erabiltzaileak sartutako datuak web orri baten bidez hartu eta aMySQL datu-basea, orduan SQL injekzio segurtasun arazoak egon daitezke.

Kapitulu honek SQL injekzioa saihesteko eta SQL-n injektatutako karaktereak iragazteko script-ak nola erabili azalduko dizu.

SQL injekzio deritzona zerbitzaria engainatzea da SQL komando gaiztoak exekutatzeko, SQL komandoak web inprimakian sartuz, domeinu-izenaren edo orrialdearen eskaeraren kontsulta-katea bidaltzeko edo sartzeko.

Ez dugu inoiz fidatu behar erabiltzaileen sarrerak, erabiltzaileen sarrerako datuak seguruak ez direla suposatu behar dugu eta guztiok iragazi behar ditugu erabiltzaileen sarrerako datuak.

Hurrengo adibidean, sartutako erabiltzaile-izenak letren, zenbakien eta azpimarratzen konbinazio bat izan behar du, eta erabiltzaile-izenak 8 eta 20 karaktere arteko luzera izan behar du:

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

Ikus dezagun karaktere berezirik iragazten ez denean gertatzen den SQL egoera:

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

Goiko injekzio adierazpenean, ez dugu $name-ren aldagaia iragazi behar ez dugun SQL instrukzioa $namen txertatzen da, erabiltzaileen taulako datu guztiak ezabatuko dituena.

PHPn mysqli_query()-k ez du onartzen SQL sentsazio anitz exekutatzeko, baina SQLite eta PostgreSQL-n, SQL instrukzio anitz exekutatu daitezke aldi berean, beraz, erabiltzaile horien datuak zorrotz egiaztatu behar ditugu.

SQL injekzioa saihesteko, puntu hauei arreta jarri behar diegu:

  • 1. Ez fidatu inoiz erabiltzaileen sarrera.Egiaztatu erabiltzailearen sarrera, adierazpen erregularrak erabil ditzakezu edo luzera mugatu; bihurtu komatxo bakunak eta "-" bikoitza, etab.
  • 2. Ez erabili inoiz muntaketa dinamikoko sql, parametrotutako sql erabil dezakezu edo zuzenean erabili gordetako prozedurak datuak kontsultatzeko eta sartzeko.
  • 3. Inoiz ez erabili datu-base-konexioak administratzaile-pribilegioekin, erabili datu-base-konexio bereiziak pribilegio mugatuak dituzten aplikazio bakoitzerako.
  • 4. Ez gorde informazio konfidentziala zuzenean, ez enkriptatu edo hash kendu pasahitzak eta informazio sentikorra.
  • 5. Aplikazioaren salbuespen-informazioak ahalik eta aholku gutxien eman behar du, eta hobe da errore-informazio pertsonalizatua erabiltzea jatorrizko errore-informazioa biltzeko.
  • 6. Sql injekzio detektatzeko metodoak, oro har, laguntzaileak hartzen ditu软件Edo detektatzeko webgunearen plataforma, softwareak, oro har, sql injekzio detektatzeko tresna jsky erabiltzen du, eta webgunearen plataformak Yisi webgunearen segurtasun plataforma detektatzeko tresna du. MDCSOFT SCAN et al.MDCSOFT-IPS erabiltzeak SQL injekzio, XSS eraso eta abarren aurka modu eraginkorrean defendatu dezake.

Saihestu SQL injekzioa

Perl eta PHP bezalako scripting lengoaietan erabiltzaileak sartutako datuetatik ihes egin dezakezu SQL injekzioa saihesteko.

PHPrako MySQL luzapenak mysqli_real_escape_string() funtzioa eskaintzen du sarrerako karaktere berezietatik ihes egiteko.

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

Injekzioa Like Adierazpenetan

Horrelako kontsultak egitean, erabiltzaileak "_" eta "%"-rekin balioak sartzen baditu, hau gertatuko da: hasiera batean erabiltzaileak "abcd_" kontsultatu nahi zuen, baina kontsultaren emaitzek "abcd_", "abcde" eta "abcdf" dira. "Et.; erabiltzaileak "%30" kontsultatu nahi duenean ere gertatzen da arazoa (oharra: ehuneko hogeita hamar).

PHP script batean addcslashes() funtzioa erabil dezakegu goiko egoera kudeatzeko, hurrengo adibidean bezala:

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

addcslashes() funtzioak atzera-barra gehitzen du zehaztutako karakterearen aurretik.

Sintaxi formatua:

addcslashes(string,characters)
参数描述
kateaBeharrezkoa.Egiaztatu beharreko katea zehazten du.
pertsonaiakAukerakoa.addcslashes(k) eragindako karaktere edo karaktere sorta zehazten du.

Hope Chen Weiliang bloga ( https://www.chenweiliang.com/ ) partekatua "Nola eragozten du MySQL-k sql injekzioa? sql injekzio printzipioa eta prebentzioa", lagunduko dizu.

Ongi etorri artikulu honen esteka partekatzera:https://www.chenweiliang.com/cwl-500.html

Ongi etorri Chen Weiliang-en blogeko Telegram kanalera azken eguneraketak jasotzeko!

🔔 Izan zaitez kanalaren goiko direktorioan "ChatGPT Content Marketing AI Tool Erabilera Gida" baliotsua lortzen lehena! 🌟
📚 Gida honek balio handia du, 🌟Aukera arraroa da hau, ez galdu! ⏰⌛💨
Partekatu eta gustatzen bazaizu!
Zure partekatzea eta gustukoak dira gure etengabeko motibazioa!

 

发表 评论

Zure helbide elektronikoa ez da argitaratuko. 必填 项 已 用 * 标注

joan goian