Bezpečnostní funkce PHP: strip_tags, filter_var, Md5 a sha1

⚡ Chytré shrnutí

Zabezpečení v PHP chrání webové aplikace před útočníky a neopatrným vstupem ověřováním, sanitizací a bezpečným ukládáním dat. Tento návod se zabývá hlavními hrozbami a poté ukazuje strip_tags, filter_var a esca.pinga moderní hashování hesel s password_hash pro ochranu před XSS, SQL injection a odcizením přihlašovacích údajů.

  • 🛡️ Znát hrozby: Hlavními riziky jsou SQL injection, cross-site scripting a code injection, obvykle dodávané prostřednictvím formulářů nebo URL Parametry.
  • 🧹 Štítky proužků: strip_tags odstraňuje HTML, JavaSkripty a PHP tagy ze vstupu, čímž se snižuje riziko uloženého cross-site scriptingu.
  • (Tj. Ověření vstupu: Funkce filter_var ověřuje a čistí data, čímž se ověří, zda je hodnota očekávaného typu, než jí váš kód přizná důvěřivost.
  • 🔒 Únik nebo vazba: Funkce mysqli_real_escape_string escapuje vstup dotazu, ale parametrizované připravené příkazy jsou silnější obranou proti SQL injection.
  • 🔑 Hašování hesel správně: Nikdy neukládejte hesla pomocí MD5 nebo SHA1; použijte password_hash a password_verify, které používají pomalé, solené hashování bcrypt.
  • ???? Hloubková obrana: Kombinujte validaci, escaping, HTTPS a databázové účty s nejnižšími oprávněními, spíše než spoléhání se na jeden ovládací prvek.
  • 🤖 AI Assist: Nástroje umělé inteligence dokáží auditovat PHP kód, zda neobsahuje bezpečnostní chyby, a bezpečně opravit slabiny typu SQL injection nebo XSS.

Zabezpečení PHP

Potenciální bezpečnostní hrozby

V zásadě existují dvě skupiny lidí, kteří 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 neúmyslně zadat do formulářů nesprávné parametry, což může mít negativní dopad na webovou stránku nebo webovou aplikaci.

Následují druhy útoků, na které si musíme dávat pozor.

SQL Injection – tento typ útoku přidává škodlivý kód k SQL prohlášení.

To se provádí buď pomocí formulářů pro vstup uživatele, nebo URLkteré používají proměnné.

Připojený kód zakomentuje podmínku v klauzuli WHERE příkazu SQL. Připojený 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í mezi weby (XSS) – tento typ útoku vkládá škodlivý kód, obvykle JavaSkript. To se provádí pomocí formulářů pro vstup uživatelů, jako jsou kontaktní formuláře a formuláře pro komentáře. Dělá se to za účelem:

  • Získat citlivé informace jako např data souborů cookie
  • Přesměrovat uživatele na jinou stránku URL.

Mezi další hrozby může patřit vkládání PHP kódu, vkládání shellu, vkládání e-mailů a odhalení zdrojového kódu skriptu.

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 odstraňuje HTML, JavaScénář, nebo PHP tagy z řetězce.

Tato funkce je užitečná, když potřebujeme chránit naši aplikaci před útoky, jako je například cross-site scripting.

Uvažujme 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 soubor comments.php do složky phptuts, přejděte do složky URL http://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(0);</script>";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Přejděte na URL http://localhost/phptuts/comments.php

PHP strip_tags

Nyní si zabezpečme naši aplikaci před takovými útoky pomocí funkce strip_tags.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Přejděte na 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

Následující kód je určen pro systém komentářů. Používá funkci filter_var a konstantu FILTER_SANITIZE_STRIPPED k odstranění tagů.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
 
?>

Výstup:

alert('Your site sucks!');

Poznámka: Funkce FILTER_SANITIZE_STRIPPED (alias funkce FILTER_SANITIZE_STRING) je od verze PHP 8.1 zastaralá. Pro nový kód použijte strip_tags() nebo pro bezpečné zobrazení htmlspecialchars().

PHP mysqli_real_escape_string

Funkce mysqli_real_escape_string se používá k ochraně aplikace před SQL injection.

Předpokládejme, že máme následující SQL příkaz pro ověření uživatelského jména a hesla.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Zlomyslný uživatel může vstoupit ' NEBO 1 = 1 — do textového pole pro uživatelské jméno a 1234 do textového pole pro heslo. Napišme si kód pro ověřovací modul.

<?php
 
$uid = "0$uid1$pwd';";
 
echo $sql;
 
?>

Konečný výsledek bude:

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

TADY,

  • „WHERE uid = ”“ testuje prázdné uživatelské ID
  • „' NEBO 1 = 1“ je podmínka, která bude vždy pravdivá
  • „–“ zakomentuje část, která testuje heslo.

Výše uvedený dotaz vrátí všechny uživatele. Nyní použijeme funkci mysqli_real_escape_string k zabezpečení našeho přihlašovacího modulu. V reálném kódu tato funkce bere jako svůj první argument připojení k databázi.

<?php
 
$uid = mysqli_real_escape_string($conn, "0$uid1$pwd';";
 
echo $sql;
 
?>

Výše uvedený kód vypíše:

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Poznámka: Druhá jednoduchá uvozovka byla escapována, takže bude považována za součást uživatelského jména a heslo nebude zakomentováno.

Nejlepší praxe: uniknoutping pomáhá, ale parametrizované připravené příkazy v mysqli nebo PDO jsou doporučenou obranou proti SQL injection, protože data se nikdy nepřimíchají do textu dotazu.

PHP Md5 a PHP sha1

MD5 je zkratka pro Message Digest 5 a SHA1 je zkratka pro Secure Hash Algorithm 1. Obě se jedná o jednosměrné hašovací funkce.

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 do URL.

PHP Md5 a PHP sha1

důležité: MD5 a SHA1 jsou rychlé, nesolené hashovací algoritmy a jsou již není považováno za bezpečné pro ukládání hesel, protože je lze rychle prolomit pomocí moderního hardwaru a duhových tabulek. Používejte je pouze pro nezabezpečené kontrolní součty a pro hesla použijte níže uvedenou metodu.

Jak bezpečně hašovat hesla v PHP

Pro ukládání hesel nabízí PHP metody password_hash a password_verify. Tyto metody používají pomalý algoritmus se solenými hodnotami (ve výchozím nastavení bcrypt), takže každý hash je jedinečný a jeho prolomení je drahé, i když je vaše databáze ukradena.

<?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";
}
?>
  • password_hash() generuje solený hash pro uložení do databáze; PASSWORD_DEFAULT vás udržuje na aktuálním doporučeném algoritmu.
  • ověření_hesla() porovná pokus o přihlášení s uloženým hašem, aniž by jej dešifroval.

Protože sůl a algoritmus jsou uloženy uvnitř hashe, nikdy je nespravujete sami, což z něj činí správný a do budoucna připravený způsob, jak zacházet s hesly v PHP.

Nejčastější dotazy

Používejte připravené příkazy s vázanými parametry v MySQL nebo PDO. Dotaz a data se odesílají odděleně, takže uživatelský vstup nikdy nemůže změnit strukturu dotazu. Toto je silnější než ruční esca.ping vstup.

Funkce strip_tags zcela odstraňuje tagy HTML a PHP, zatímco funkce htmlspecialchars je převádí na bezpečné entity, takže se zobrazují jako text. Pro výstup použijte klávesu esca.ping Proti XSS je obvykle bezpečnější volbou htmlspecialchars.

Generujte unikátní CSRF token pro každou relaci, vložte ho jako skryté pole do každého formuláře a ověřte ho při odeslání. Zamítněte všechny požadavky, jejichž token chybí nebo neodpovídá uložené hodnotě.

Ano. Umělá inteligence dokáže skenovat, zda nedochází k SQL injection, XSS, nezabezpečenému hashování hesel a nebezpečnému zacházení se soubory, a poté každé riziko vysvětlit a navrhnout opravu. Berte to jako užitečný první krok, ne jako náhradu za bezpečnostní kontrolu.

Ano. Vložte zranitelný kód a umělá inteligence jej může přepsat pomocí připravených příkazů, výstup escapinga validaci vstupu. Otestujte opravený kód a porovnejte opravu s původním vstupem útoku.

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