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

PHP strip_tags

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

PHP strip_tags

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 strip_tags

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

PHP Md5 a PHP sha1

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.

Shrňte tento příspěvek takto: