(PHP 4 >= 4.3.0, PHP 5)
mysql_real_escape_string -- Levédi egy stringben a speciális karaktereket egy SQL lekérdezés számáraLevédi a speciális karaktereket az unescaped_string-ben, figyelembe véve az aktuális kapcsolat karakterkészletét. Tehát biztonságos, ha mysql_query()-n belül használod. Ha bináris adatot akarsz beszúrni, akkor ezt a függvényt kell használnod.
A mysql_real_escape_string() a MySQL könyvtár mysql_real_escape_string függvényét hívja meg, amely visszaperjeleket illeszt a következõ karakterek elé: \x00, \n, \r, \, ', " és \x1a.
Ezt a függvényt mindig használhatod (néhány kivétellel) arra, hogy az adatokat biztonságossá tedd beszúrás elõtt.
A string, amelyben le kell védeni a karaktereket.
A MySQL kapcsolat. Ha a kapcsolatazonosító nincs megadva, akkor az utólsó mysql_connect()-el megnyitott kapcsolatot használja. Ha nem talál semmilyen kapcsolatot, megpróbál létrehozni egyet úgy, mintha a mysql_connect() paraméterek nélkül lett volna meghívva. Ha esetleg semmilyen kapcsolatot nem talál és nem is sikerül létrehoznia, akkor egy E_WARNING szintű figyelmeztetés generálódik.
Példa 2. Példa SQL beoltásos támadásra
A MySQL-nek küldött kérés
Ez megengedné bárkinek, hogy érvényes jelszó nélkül belépjen. |
Példa 3. Lekérdezés helyes elõkészítése A mysql_real_escape_string() minden változóra való alkalmazása megelõzi a fenti problémát. A következõ példa bemutatja adatbázis-lekérdezések "jó szokás" szerinti elvégzését, függetlenül a Magic Quotes beállítástól.
A kérés mostmár helyesen fog végrehajtódni, az SQL beszúrásos támadás nem fog mûködni. |
Megjegyzés: A mysql_real_escape_string() használata elõtt egy MySQL kapcsolat szükséges, egyébként egy E_WARNING szintû hiba keletkezik és a visszatérési érték FALSE lesz. Ha a link_identifier paraméter nincs definiálva, akkor a legutóbbi MySQL kapcsolatot fogja használni.
Megjegyzés: Ha a magic_quotes_gpc be van állítva, és a felhasználótól érkezõ adatokkal dolgozol, elõbb a stripslashes() függvényt kell meghívnod az adatokra. Ha már levédett adatra hívod meg ezt a függvényt, a levédett adat újból levédésre kerül.
Megjegyzés: Ha az adatokat nem véded le ezzel a függvénnyel, az adatbázis-kérés nyitva áll az SQL beoltásos támadásoknak.
Megjegyzés: A mysql_real_escape_string() nem védi le a % és a _ karaktert. Ezek a MySQL-ben joker karakterek, amikor a LIKE, GRANT vagy REVOKE-ban szerepelnek.
mysql_client_encoding() |
addslashes() |
stripslashes() |
The magic_quotes_gpc directive |
The magic_quotes_runtime directive |