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.

  • 🛡️ Ismerd meg a fenyegetéseket: A főbb kockázatok az SQL-befecskendezés, a webhelyek közötti szkriptelés és a kódbefecskendezés, amelyek általában űrlapokon vagy URL paramétereket.
  • 🧹 Csíkcímkék: A strip_tags eltávolítja a HTML-t, JavaSzkriptek és PHP címkék kinyerése a bemenetből, csökkentve a tárolt webhelyközi szkriptelés kockázatát.
  • ✅ Bevitel érvényesítése: A filter_var validálja és fertőtleníti az adatokat, megerősítve, hogy egy érték a várt típusú, mielőtt a kód megbízna benne.
  • 🔒 Escape vagy Bind: A mysqli_real_escape_string megkerüli a lekérdezés bemenetét, de a paraméterezett előkészített utasítások erősebb védelmet nyújtanak az SQL injekcióval szemben.
  • 🔑 Hash jelszavak helyesen: Soha ne tároljon jelszavakat MD5 vagy SHA1 kódolással; használjon password_hash és password_verify függvényeket, amelyek lassú, sózott bcrypt hashelést alkalmaznak.
  • ???? Mélységi védelem: Validáció kombinálása, escaping, HTTPS és a legkevésbé jogosultságos adatbázisfiókok helyett egyetlen vezérlőre támaszkodnak.
  • 🤖 AI Assist: A mesterséges intelligencia eszközei képesek a PHP kód biztonsági hibáinak ellenőrzésére, és segíthetnek biztonságosan kijavítani az SQL injekciós vagy XSS gyengeségeket.

PHP biztonság

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

PHP strip_tags

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

PHP strip_tags

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 strip_tags

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.

PHP Md5 és PHP sha1

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.

GYIK

Használjon előre elkészített utasításokat kötött paraméterekkel a mysqli-ben vagy a PDO-ban. Ezek külön küldik el a lekérdezést és az adatokat, így a felhasználói bevitel soha nem változtathatja meg a lekérdezés struktúráját. Ez erősebb, mint a manuális esca.ping bemenet.

A strip_tags függvény teljesen eltávolítja a HTML és PHP tageket, míg a htmlspecialchars függvény biztonságos entitásokká alakítja azokat, így szövegként jelennek meg. Az esca kimenethezping Az XSS-sel szemben a htmlspecialchars általában a biztonságosabb választás.

Generáljon egyedi CSRF tokent munkamenetenként, ágyazza be rejtett mezőként minden űrlapba, és ellenőrizze a beküldéskor. Utasítson el minden olyan kérést, amelynek a tokenje hiányzik vagy nem egyezik a tárolt értékkel.

Igen. A mesterséges intelligencia képes keresni SQL-befecskendezést, XSS-t, nem biztonságos jelszó-hashelést és nem biztonságos fájlkezelést, majd elmagyarázni az egyes kockázatokat és javaslatot tenni a javításra. Tekintsd ezt hasznos első lépésként, ne pedig egy biztonsági áttekintés helyettesítőjeként.

Igen. Illeszd be a sebezhető kódot, és a mesterséges intelligencia átírhatja előkészített utasításokkal, esca kimenettel.ping, és bemeneti validáció. Teszteld a javított kódot, és ellenőrizd a javítást az eredeti támadási bemenettel szemben.

Foglald össze ezt a bejegyzést a következőképpen: