Cikkkönyvtár
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úr | Kívánt.Megadja az ellenőrizni kívánt karakterláncot. |
karakter | Vá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!
📚 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!