Wéi verhënnert MySQL sql Injektioun? SQL Injektiounsprinzip a Präventioun

MySQLWéi vermeide ech sql Injektioun? SQL Injektiounsprinzip a Präventioun

MySQL an SQL Injektioun

Wann Dir d'Donnéeën, déi vum Benotzer duerch eng Websäit aginn sinn, hëlt an se an engMySQL Datebank, da kann et SQL Injektioun Sécherheetsproblemer ginn.

Dëst Kapitel wäert Iech virstellen wéi Dir SQL Injektioun verhënnert a Skripte benotzt fir injizéiert Zeechen an SQL ze filteren.

Déi sougenannte SQL Injektioun ass de Server ze täuschen fir béiswëlleg SQL Kommandoen auszeféieren andeems Dir SQL Kommandoen an de Webform setzt fir d'Ufro String vum Domain Numm oder Säit Ufro ofzeginn oder z'inputéieren.

Mir sollten ni de Benotzerinput vertrauen, mir mussen unhuelen datt d'Benotzerinputdaten onsécher sinn, a mir mussen all Benotzerinputdaten filteren.

Am folgende Beispill muss den aginnen Benotzernumm eng Kombinatioun vu Buschtawen, Zuelen an Ënnersträicher sinn, an de Benotzernumm muss tëscht 8 an 20 Zeechen laang sinn:

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

Loosst eis d'SQL Situatioun kucken, déi geschitt wann keng speziell Zeechen gefiltert ginn:

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

An der uewe genannter Injektiounserklärung hu mir d'Variabel vum $name net gefiltert, an d'SQL Ausso, déi mir net brauchen, gëtt an $name agebaut, wat all d'Donnéeën an der Benotzertabel läscht.

mysqli_query () an PHP ass net erlaabt méi SQL Aussoen auszeféieren, awer a SQLite a PostgreSQL kënne verschidde SQL Aussoen zur selwechter Zäit ausgefouert ginn, also musse mir d'Donnéeë vun dëse Benotzer strikt verifizéieren.

Fir SQL Injektioun ze vermeiden, musse mir op déi folgend Punkten oppassen:

  • 1. Vertrauen ni Benotzer Input.Kontrolléiert den Input vum Benotzer, Dir kënnt regulär Ausdréck benotzen oder d'Längt limitéieren; konvertéiert eenzel Zitater an duebel "-", asw.
  • 2. Benotzt ni dynamesch Assemblée sql, Dir kënnt parametriséiert sql benotzen oder direkt gespäichert Prozedure fir Datenfroen an Zougang benotzen.
  • 3. Ni benotzt Datebank Verbindungen mat Administrator Privilegien, benotzen separat Datebank Verbindungen mat limitéiert Privilegien fir all Applikatioun.
  • 4. Späichert keng vertraulech Informatioun direkt, verschlësselt oder hash aus Passwierder a sensibel Informatioun.
  • 5. D'Ausnahmsinformatioun vun der Applikatioun soll esou wéineg Hiweiser wéi méiglech ginn, an et ass am beschten personaliséiert Feelerinformatioun ze benotzen fir déi ursprénglech Feelerinformatioun ze wéckelen
  • 6. D'Detektiounsmethod vun der sql-Injektioun adoptéiert allgemeng HëllefSoftwareOder d'Websäit Plattform fir z'entdecken, d'Software benotzt allgemeng de sql Injektiounserkennungstool jsky, d'Websäit Plattform huet d'Yisi Websäit Sécherheetsplattform Detektiounstool. MDCSOFT SCAN et al.Mat MDCSOFT-IPS kann effektiv géint SQL Injektioun, XSS Attacken, etc.

Vermeiden SQL Injektioun

A Skriptsprooche wéi Perl a PHP kënnt Dir d'Donnéeën entkommen, déi vum Benotzer aginn sinn fir SQL Injektioun ze vermeiden.

D'MySQL Extensioun fir PHP stellt d'mysqli_real_escape_string () Funktioun fir speziell Input Zeechen ze entkommen.

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

Injektioun an Like Aussoen

Wann Dir Ufro wéi, wann de Benotzer Wäerter mat "_" an "%" agitt, geschitt dat: de Benotzer wollt ursprénglech "abcd_" ufroen, awer d'Ufro Resultater enthalen "abcd_", "abcde", an "abcdf" " Etc.; de Problem geschitt och wann de Benotzer "30%" wëllt ufroen (Notiz: drësseg Prozent).

An engem PHP Skript kënne mir d'adcslashes () Funktioun benotzen fir déi uewe genannte Situatioun ze handhaben, wéi am folgende Beispill:

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

D'Funktion addcslashes () füügt e Backslash virum spezifizéierte Charakter.

Syntax Format:

addcslashes(string,characters)
ParameterBeschreiwung
StringNéideg.Spezifizéiert d'String fir ze kontrolléieren.
CharaktereFakultativ.Spezifizéiert de Charakter oder Gamme vu Charaktere betraff vun addcslashes ().

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) gedeelt "Wéi verhënnert MySQL sql Injektioun? sql Injektiounsprinzip a Präventioun", et hëlleft Iech.

Wëllkomm de Link vun dësem Artikel ze deelen:https://www.chenweiliang.com/cwl-500.html

Wëllkomm op dem Telegram Kanal vum Chen Weiliang säi Blog fir déi lescht Updates ze kréien!

🔔 Gitt deen Éischten dee wäertvollen "ChatGPT Content Marketing AI Tool Usage Guide" am Kanal Top Verzeechnes ze kréien! 🌟
📚 Dëse Guide enthält en enorme Wäert, 🌟 Dëst ass eng selten Geleeënheet, verpasst et net! ⏰⌛💨
Deelen a liken wann dir wëllt!
Är Deelen a Likes sinn eis kontinuéierlech Motivatioun!

 

Comments

Är E-Mail Adress gëtt net verëffentlecht. Néideg Felder gi benotzt * Etikett

scroll no uewen