Hogyan akadályozza meg a MySQL az sql injekciót? SQL injekció elve és megelőzése

MySQLHogyan lehet megakadályozni az sql injekciót? SQL injekció elve és megelőzése

MySQL és SQL injekció

Ha a felhasználó által megadott adatokat egy weboldalon keresztül viszi át, és beilleszti aMySQL adatbázis, akkor SQL-befecskendezési biztonsági problémák léphetnek fel.

Ez a fejezet bemutatja, hogyan akadályozhatja meg az SQL-befecskendezést, és hogyan használhat szkripteket a beszúrt karakterek szűrésére az SQL-ben.

Az úgynevezett SQL-befecskendezés célja a kiszolgáló megtévesztése rosszindulatú SQL-parancsok végrehajtására oly módon, hogy SQL-parancsokat szúr be a webes űrlapba a tartománynév vagy az oldalkérés lekérdezési karakterláncának elküldése vagy bevitele érdekében.

Soha nem szabad megbíznunk a felhasználói bevitelben, feltételeznünk kell, hogy a felhasználói bemeneti adatok nem biztonságosak, és mindannyiunknak szűrnünk kell a felhasználói bemeneti adatokat.

A következő példában a megadott felhasználónévnek betűk, számok és aláhúzásjelek kombinációjának kell lennie, a felhasználónévnek pedig 8 és 20 karakter közötti hosszúságúnak kell lennie:

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

Vessünk egy pillantást az SQL helyzetre, amely akkor fordul elő, ha nem szűrünk speciális karaktereket:

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

A fenti injekciós utasításban nem szűrtük a $name változót, az SQL utasítás, amelyre nincs szükségünk, bekerül a $name-be, ami törli az összes adatot a felhasználók táblájából.

A PHP-ben a mysqli_query() nem hajthat végre több SQL utasítást, de az SQLite és a PostgreSQL egyszerre több SQL utasítást is végrehajthat, ezért ezeknek a felhasználóknak az adatait szigorúan ellenőriznünk kell.

Az SQL-befecskendezés elkerülése érdekében a következő pontokra kell figyelnünk:

  • 1. Soha ne bízzon a felhasználói bevitelben.Ellenőrizze a felhasználó bevitelét, használhat reguláris kifejezéseket, korlátozhatja a hosszt; konvertálhat szimpla idézőjeleket és dupla "-"-t stb.
  • 2. Soha ne használjon dinamikus assembly sql-t, használhat paraméterezett sql-t vagy közvetlenül tárolt eljárásokat adatlekérdezéshez és hozzáféréshez.
  • 3. Soha ne használjon rendszergazdai jogosultságokkal rendelkező adatbázis-kapcsolatokat, használjon különálló, korlátozott jogosultságokkal rendelkező adatbázis-kapcsolatokat minden egyes alkalmazáshoz.
  • 4. Ne tároljon bizalmas információkat közvetlenül, ne titkosítson és ne hasson ki jelszavakat és érzékeny információkat.
  • 5. Az alkalmazás kivételinformációinak a lehető legkevesebb tippet kell adniuk, és a legjobb, ha egyéni hibainformációkat használ az eredeti hibainformációk tördeléséhez.
  • 6. Az sql injekció észlelési módszere általában kiegészítő módszert alkalmaz软件Vagy a webhely platform észlelésére, a szoftver általában az SQL injekciós érzékelő eszközt használja (jsky), a webhely platformja a Yisi webhely biztonsági platform észlelő eszköze. MDCSOFT SCAN et al.Az MDCSOFT-IPS használatával hatékonyan védekezhet az SQL injekció, XSS támadások stb. ellen.

Az SQL-befecskendezés megakadályozása

Az olyan szkriptnyelveken, mint a Perl és a PHP, elkerülheti a felhasználó által bevitt adatokat, hogy megakadályozza az SQL injekciót.

A PHP MySQL-kiterjesztése biztosítja a mysqli_real_escape_string() függvényt a speciális beviteli karakterek elkerülésére.

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

Injekció hasonló nyilatkozatokban

Hasonló lekérdezéskor, ha a felhasználó „_” és „%” karakterekkel adja meg az értékeket, ez fog történni: a felhasználó eredetileg az „abcd_” kifejezést akarta lekérdezni, de a lekérdezés eredménye között szerepel „abcd_”, „abcde” és „abcdf” " Stb.; a probléma akkor is előfordul, ha a felhasználó "30%"-t (megjegyzés: harminc százalék) akar lekérdezni.

Egy PHP szkriptben az addcslashes() függvényt használhatjuk a fenti helyzet kezelésére, mint a következő példában:

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

Az addcslashes() függvény fordított perjelet ad a megadott karakter elé.

Szintaxis formátum:

addcslashes(string,characters)
参数leírás
húrKívánt.Megadja az ellenőrizni kívánt karakterláncot.
karakterVálasztható.Megadja az addcslashes() által érintett karaktert vagy karaktertartományt.

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) shared "Hogyan akadályozza meg a MySQL az sql injekciót? sql injekció elve és megelőzése", ez segít.

Üdvözöljük a cikk linkjének megosztásában:https://www.chenweiliang.com/cwl-500.html

Üdvözöljük Chen Weiliang blogjának Telegram csatornáján, hogy értesüljön a legfrissebb hírekről!

🔔 Legyen Ön az első, aki megkapja az értékes "ChatGPT Content Marketing AI Tool használati útmutatót" a csatorna felső könyvtárában! 🌟
📚 Ez az útmutató hatalmas értéket tartalmaz, 🌟 Ritka lehetőség ez, ne hagyd ki! ⏰⌛💨
Oszd meg és lájkold, ha tetszik!
Az Ön megosztása és lájkja folyamatos motivációnk!

 

发表 评论

Az e-mail címed nem kerül nyilvánosságra. A kötelező mezőket használjuk * Címke

görgess a tetejére