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 může patřit – vkládání PHP kódu, vkládání shellu, vkládání e-mailů, vkládání zdrojového kódu skriptu. Code Zveřejnění atd.

Doporučené postupy zabezpečení aplikací PHP

Pojďme se nyní podívat na některé osvědčené postupy zabezpečení PHP, které musíme zvážit při vývojiping naše aplikace.

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: