Bezpečnostní funkce PHP: strip_tags, filter_var, Md5 a sha1
Potenciální bezpečnostní hrozby
Jsou to v podstatě dvě skupiny lidí, které mohou napadnout váš systém
- Hackeři – se záměrem získat přístup k neoprávněným datům nebo narušit aplikaci
- Uživatelé – mohou nevinně zadávat nesprávné parametry do formulářů, což může mít negativní dopad na web nebo webovou aplikaci.
Následují druhy útoků, na které si musíme dávat pozor.
SQL Injection – Tento typ útoku připojuje škodlivý kód SQL prohlášení.
To se provádí buď pomocí uživatelských vstupních formulářů, nebo URL, které používají proměnné.
Připojený kód komentuje podmínku v klauzuli WHERE příkazu SQL. Přiložený kód může také;
- vložte podmínku, která bude vždy pravdivá
- odstranit data z tabulky
- aktualizovat data v tabulce
- Tento typ útoku se obvykle používá k získání neoprávněného přístupu k aplikaci.
Skriptování napříč weby – tento typ útoku obvykle vkládá škodlivý kód JavaSkript. To se provádí pomocí uživatelských vstupních formulářů, jako jsou kontakty a komentáře. To se provádí;
- Získat citlivé informace jako např údaje o cookies
- Přesměrujte uživatele na jinou adresu URL.
- Mezi další hrozby mohou patřit – vkládání kódu PHP, vkládání shellu, vkládání e-mailů, odhalení zdrojového kódu skriptu atd.
Doporučené postupy zabezpečení aplikací PHP
Podívejme se nyní na některé osvědčené postupy zabezpečení PHP, které musíme vzít v úvahu při vývoji našich aplikací.
PHP strip_tags
Funkce strip_tags odstraní HTML, JavaScénář nebo PHP tagy z řetězce.
Tato funkce je užitečná, když musíme chránit naši aplikaci před útoky, jako je cross site scripting.
Uvažujme o aplikaci, která přijímá komentáře od uživatelů.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Za předpokladu, že jste uložili comments.php do složky phptuts, přejděte na URLhttp://localhost/phptuts/comments.php
Předpokládejme, že jako uživatelský vstup obdržíte následující alert(‘Your site sucks!’);
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo "<h4>My Commenting System</h4>";
echo $user_input;
?>
Přejděte na adresu URL http://localhost/phptuts/comments.php
Pojďme nyní zabezpečit naši aplikaci před takovými útoky pomocí funkce strip_tags.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo strip_tags($user_input);
?>
Přejděte na adresu URL http://localhost/phptuts/comments.php
PHP funkce filter_var
Funkce filter_var se používá k ověření a dezinfekci dat.
Validace kontroluje, zda jsou data správného typu. Číselná kontrola ověření na řetězci vrátí falešný výsledek.
Sanitace odstraňuje nelegální znaky z a šňůra.
Úplnou referenci naleznete na tomto odkazu filtr_var
Kód je pro systém komentářů.
K odstranění značek používá funkci filter_var a konstantu FILTER_SANITIZE_STRIPPED.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
?>
Výstup:
alert('Your site sucks!');
Funkce mysqli_real_escape_string Tato funkce se používá k ochraně aplikace před SQL injection.
Předpokládejme, že máme následující příkaz SQL pro ověření uživatelského jména a hesla.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Uživatel se zlými úmysly může do textového pole ID uživatele zadat následující kód. ' NEBO 1 = 1 — A 1234 v textovém poli hesla Pojďme nakódovat ověřovací modul
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Konečný výsledek bude
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
TADY,
- “SELECT * FROM users WHERE user_id = ”” testuje prázdné ID uživatele
- „' NEBO 1 = 1 “ je podmínka, která bude vždy platit
- „–“ komentuje tu část, která testuje heslo.
Výše uvedený dotaz vrátí všechny uživatele. Použijme nyní funkci mysqli_real_escape_string k zabezpečení našeho přihlašovacího modulu.
<?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;
?>
Vypíše se výše uvedený kód
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Hodnocení druhá jednoduchá uvozovka nám unikla, bude považována za součást uživatelského jména a heslo nebude komentováno.
PHP Md5 a PHP sha1
Md5 je zkratka pro Message Digest 5 a sha1 je zkratka pro Secure Hash Algorithm 1.
Oba se používají k šifrování řetězců.
Jakmile je řetězec zašifrován, je zdlouhavé jej dešifrovat.
Md5 a sha1 jsou velmi užitečné při ukládání hesel do databáze.
Níže uvedený kód ukazuje implementaci md5 a sha1
<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>
Za předpokladu, že jste uložili soubor hashes.php do složky phptuts, přejděte na adresu URL
Jak můžete vidět z výše uvedených hashů, pokud by útočník získal přístup k vaší databázi, stále by neznal hesla pro přihlášení.
Shrnutí
- Zabezpečení se týká opatření zavedených k ochraně aplikace před náhodnými a škodlivými útoky.
- Funkce strip_tags se používá k odstranění značek, jako je např ze vstupních dat
- Funkce filter_var ověřuje a php dezinfikuje vstupní data
- mysqli_real_escape_string se používá k dezinfekci příkazu SQL. Odstraňuje škodlivé znaky z příkazů
- MD5 i SHA1 se používají k šifrování hesla.




