PHP biztonsági függvény: strip_tags, filter_var, Md5 és sha1
Lehetséges biztonsági fenyegetések
Ezek alapvetően két embercsoport, akik megtámadhatják a rendszert
- Hackerek – azzal a szándékkal, hogy jogosulatlan adatokhoz férjenek hozzá, vagy megzavarják az alkalmazást
- Felhasználók – ártatlanul rossz paramétereket írhatnak be az űrlapokon, amelyek negatív hatással lehetnek egy webhelyre 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á SQL nyilatkozatokat.
Ez felhasználói beviteli űrlapokkal vagy változókat használó URL-ekkel történik.
A hozzáfűzött kód megjegyzést fűz egy SQL utasítás WHERE záradékában lévő feltételhez. A mellékelt kód is;
- 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 – az ilyen típusú támadások általában káros kódot szúrnak be JavaForgatókönyv. Ez a felhasználói beviteli űrlapok használatával történik, például a kapcsolatfelvételi űrlapokkal és a megjegyzés űrlapokkal. Ez azért történik, hogy;
- Érzékeny információk lekérése, mint pl cookie-k adatai
- A felhasználó átirányítása egy másik URL-re.
- Egyéb fenyegetések lehetnek – PHP kódbefecskendezés, Shell-befecskendezés, e-mail-befecskendezés, Script Source Code Disclosure stb.
PHP alkalmazásbiztonsági bevált gyakorlatok
Lássunk most néhány PHP Security bevált gyakorlatot, amelyeket figyelembe kell vennünk alkalmazásaink fejlesztése során.
PHP strip_tags
A strip_tags függvény eltávolítja a HTML-t, JavaForgatókönyv vagy PHP címkéket egy karakterláncból.
Ez a funkció akkor hasznos, ha meg kell védenünk alkalmazásunkat olyan támadások ellen, mint például a webhelyek közötti szkriptek.
Vegyünk egy olyan alkalmazást, amely elfogadja a felhasználók megjegyzéseit.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Feltéve, hogy a comments.php fájlt a phptuts mappába mentette, keresse meg az URL-thttp://localhost/phptuts/comments.php
Tegyük fel, hogy a következőt kapja felhasználói bevitelként alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Keresse meg az URL-t http://localhost/phptuts/comments.php
Most védjük alkalmazásunkat az ilyen támadásoktól a strip_tags függvény segítségével.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
Keresse meg az URL-t 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.
Tekintse meg ezt a linket a teljes hivatkozásért filter_var
A kód a kommentelő rendszerhez tartozik.
A filter_var függvényt és a FILTER_SANITIZE_STRIPED konstanst használja a címkék eltávolításához.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
output:
alert('Your site sucks!');
mysqli_real_escape_string függvény Ez a funkció egy alkalmazás SQL-injektálás elleni védelmére szolgál.
Tegyük fel, hogy a következő SQL utasítással rendelkezünk a felhasználói azonosító és jelszó érvényesítéséhez.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
A rosszindulatú felhasználó beírhatja a következő kódot a felhasználói azonosító szövegmezőbe. ' VAGY 1 = 1 — És 1234 a jelszó mezőben Kódoljuk a hitelesítő modult
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
A végeredmény az lesz
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ITT,
- A „SELECT * FROM users WHERE user_id = ”” üres felhasználói azonosítót tesztel
- Az "' VAGY 1 = 1" egy olyan feltétel, amely mindig igaz
- A „–” megjegyzés jelzi azt a részt, amely teszteli a jelszót.
A fenti lekérdezés az összes felhasználót visszaadja. Használjuk a mysqli_real_escape_string függvényt a bejelentkezési modulunk védelmére.
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
A fenti kód jelenik meg
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Megjegyzések a második egyetlen idézetet kihagytuk nekünk, azt a felhasználói azonosító részeként kezeljük, és a jelszót nem kommentáljuk.
PHP Md5 és PHP sha1
Az Md5 a Message Digest 5 mozaikszó, az sha1 pedig a Secure Hash Algorithm 1 rövidítése.
Mindkettőt karakterláncok titkosítására használják.
Miután egy karakterláncot titkosítottak, unalmas a visszafejtése.
Az Md5 és sha1 nagyon hasznosak a jelszavak adatbázisban való tárolásánál.
Az alábbi kód az md5 és sha1 megvalósítását mutatja be
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Feltéve, hogy a hashes.php fájlt a phptuts mappába mentette, keresse meg az URL-t
Amint a fenti kivonatokból is látható, ha egy támadó hozzáférne az adatbázishoz, még mindig nem ismerné a bejelentkezéshez szükséges jelszavakat.
Összegzésként
- A biztonság az alkalmazások véletlen és rosszindulatú támadások elleni védelmére szolgáló intézkedésekre vonatkozik.
- A strip_tags függvény olyan címkék eltávolítására szolgál, mint pl bemeneti adatokból
- A filter_var függvény érvényesíti és php megtisztítja a bemeneti adatokat
- A mysqli_real_escape_string az SQL utasítás megtisztítására szolgál. Eltávolítja a rosszindulatú karaktereket az állításokból
- az MD5 és az SHA1 is a jelszó titkosítására szolgál.