PHP biztonsági függvény: strip_tags, filter_var, Md5 és sha1
⚡ Okos összefoglaló
A PHP Security az adatok validálásával, fertőtlenítésével és biztonságos tárolásával védi a webes alkalmazásokat a támadóktól és a gondatlan beviteltől. Ez az útmutató a főbb fenyegetéseket ismerteti, majd bemutatja a strip_tags, filter_var és esca elemeket.ping, valamint a password_hash segítségével történő modern jelszó-hashelés az XSS, az SQL-befecskendezés és az ellopott hitelesítő adatok elleni védelem érdekében.
Lehetséges biztonsági fenyegetések
Alapvetően kétféle embercsoport támadhatja meg a rendszeredet:
- Hackerek – azzal a szándékkal, hogy jogosulatlan adatokhoz férjenek hozzá, vagy megzavarják az alkalmazást
- Felhasználók – akaratlanul is rossz paramétereket adhatnak meg az űrlapokon, ami negatív hatással lehet egy weboldalra vagy webes alkalmazásra.
Az alábbiakban felsoroljuk azokat a támadásokat, amelyekre figyelnünk kell.
SQL Injection – ez a fajta támadás káros kódot fűz hozzá a SQL nyilatkozatokat.
Ez felhasználói beviteli űrlapok segítségével történik, vagy URLs, amelyek változókat használnak.
A hozzáfűzött kód kikommenteli az SQL utasítás WHERE záradékában található feltételt. A hozzáfűzött kód a következőket is teheti:
- beilleszteni egy feltételt, amely mindig igaz
- adatok törlése egy táblából
- táblázatban frissítse az adatokat
Az ilyen típusú támadásokat általában egy alkalmazáshoz való jogosulatlan hozzáférésre használják.
Webhelyek közötti szkriptelés (XSS) – ez a támadástípus általában káros kódot illeszt be JavaSzkript. Ez felhasználói beviteli űrlapok, például kapcsolatfelvételi és hozzászólás űrlapok segítségével történik. Ennek célja:
- Érzékeny információk lekérése, mint pl sütiadatok
- Átirányítod a felhasználót egy másik oldalra URL.
Egyéb fenyegetések lehetnek a PHP kódbefecskendezés, a shell injekció, az e-mail injekció és a szkript forráskódjának felfedése.
PHP alkalmazásbiztonsági bevált gyakorlatok
Most nézzük meg a PHP biztonsági gyakorlatainak egy részét, amelyeket figyelembe kell vennünk fejlesztéskor.ping az alkalmazásainkat.
PHP strip_tags
A strip_tags függvény eltávolítja a HTML-t, JavaForgatókönyv, vagy PHP tageket egy karakterláncból.
Ez a függvény akkor hasznos, ha az alkalmazásunkat olyan támadások ellen kell védenünk, mint például a cross-site scripting.
Vegyünk egy olyan alkalmazást, amely fogadja a felhasználók hozzászólásait.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Feltételezve, hogy a comments.php fájlt a phptuts mappába mentetted, keresd meg a URL http://localhost/phptuts/comments.php
Tegyük fel, hogy a következő felhasználói bemenetet kapjuk: alert(‘Your site sucks!’);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Tallózás a URL http://localhost/phptuts/comments.php
Most biztosítsuk az alkalmazásunkat az ilyen támadásoktól a strip_tags függvénnyel.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Tallózás a URL http://localhost/phptuts/comments.php
PHP filter_var függvény
A filter_var függvény az adatok ellenőrzésére és megtisztítására szolgál.
Az érvényesítés ellenőrzi, hogy az adatok megfelelő típusúak-e. Egy karakterlánc numerikus ellenőrzése hamis eredményt ad vissza.
A fertőtlenítés az illegális karakterek eltávolítását jelenti a húr.
A teljes referenciaanyagért tekintse meg ezt a linket: filter_var
Az alábbi kód a kommentelő rendszerhez készült. A filter_var függvényt és a FILTER_SANITIZE_STRIPPED konstanst használja a címkék eltávolításához.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
output:
alert('Your site sucks!');
Jegyzet: A FILTER_SANITIZE_STRIPPED (a FILTER_SANITIZE_STRING álneve) elavult a PHP 8.1-es verziójától kezdve. Új kódhoz használd a strip_tags() függvényt, vagy a biztonságos megjelenítéshez a htmlspecialchars() függvényt.
PHP mysqli_real_escape_string
A mysqli_real_escape_string függvény az alkalmazások SQL injektálás elleni védelmére szolgál.
Tegyük fel, hogy a következő SQL utasítással ellenőrizhetjük a felhasználói azonosítót és a jelszót.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Egy rosszindulatú felhasználó bejuthat ' VAGY 1 = 1 — a felhasználói azonosító szövegmezőbe és az 1234-et a jelszó szövegmezőbe. Kódoljuk a hitelesítési modult.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
A végeredmény a következő lesz:
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ITT,
- A „WHERE uid = ”” üres felhasználói azonosítót keres.
- „' VAGY 1 = 1” egy olyan feltétel, amely mindig igaz lesz
- A „–” jellel kikommentelhető a jelszót vizsgáló rész.
A fenti lekérdezés az összes felhasználót visszaadja. Használjuk most a mysqli_real_escape_string függvényt a bejelentkezési modulunk biztonságossá tételéhez. Figyeljük meg, hogy a valós kódban ez a függvény az adatbázis-kapcsolatot veszi első argumentumként.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
A fenti kód kimenete:
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Megjegyzés: a második aposztrófot kihagytuk, így a felhasználói azonosító részének tekintjük, és a jelszó nem lesz kikommentelve.
Legjobb gyakorlat: csaliping segít, de a mysqli vagy a PDO paraméteres előkészített utasításai az ajánlott védelem az SQL injekció ellen, mivel az adatok soha nem keverednek a lekérdezés szövegébe.
PHP Md5 és PHP sha1
Az MD5 a Message Digest 5, az SHA1 pedig a Secure Hash Algorithm 1 rövidítése. Mindkettő egyirányú hashelési függvény.
Az alábbi kód az md5 és az sha1 implementációját mutatja be.
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Feltételezve, hogy elmentetted a hashes.php fájlt a phptuts mappába, keresd meg a URL.
Fontos: Az MD5 és az SHA1 gyors, sótlan hash-ek, és már nem tekinthető biztonságosnak jelszavak tárolására, mivel modern hardverekkel és szivárványtáblákkal gyorsan feltörhetők. Csak nem biztonsági ellenőrzőösszegekhez használd őket, jelszavakhoz pedig az alábbi módszert alkalmazd.
Hogyan lehet biztonságosan hashelni a jelszavakat PHP-ben?
A jelszótároláshoz a PHP a password_hash és a password_verify metódusokat biztosítja. Ezek egy lassú, sózott algoritmust alkalmaznak (alapértelmezés szerint bcrypt), így minden hash egyedi és költséges feltörni, még akkor is, ha az adatbázist ellopják.
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- jelszó_hash() egy sózott hash-t generál az adatbázisban való tároláshoz; a PASSWORD_DEFAULT a jelenlegi ajánlott algoritmuson tartja az adatokat.
- jelszó_ellenőrzés() ellenőrzi a bejelentkezési kísérletet a tárolt hash alapján anélkül, hogy valaha is visszafejtené azt.
Mivel a só és az algoritmus a hash-ben tárolódik, soha nem kell azokat magadnak kezelned, ami a jelszavak PHP-ben történő kezelésének helyes és jövőbiztos módjává teszi.





