Bezpečnost je klíčovým aspektem každé webové aplikace. Pokud chcete vytvořit bezpečnou aplikaci, musíte se zaměřit na ochranu proti různým typům útoků, jako jsou SQL injection, Cross-Site Scripting (XSS) a Cross-Site Request Forgery (CSRF). Tento článek vám poskytne návod, jak správně zabezpečit aplikace v PHP a chránit je před těmito a dalšími hrozbami.
Správná validace a sanitizace uživatelských vstupů je základem ochrany proti různým typům útoků. Je důležité vždy ověřovat, zda vstupy od uživatelů splňují očekávané formáty, a zároveň je sanitizovat, aby se zabránilo škodlivým skriptům nebo neplatným údajům.
Příklad validace:
<?php
$meno = filter_input(INPUT_POST, 'meno', FILTER_SANITIZE_STRING);
?>
Při zobrazení těchto údajů na stránce používejte funkci htmlspecialchars()
na ochranu proti XSS.
SQL injection je jedním z nejběžnějších způsobů, jak mohou útočníci manipulovat s databází. Abyste se vyhnuli tomuto problému, používejte připravené SQL dotazy s parametry, které automaticky zabezpečí vstupy.
Příklad použití PDO na připravený dotaz:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$stmt = $pdo->prepare('SELECT * FROM uzivatele WHERE jmeno = :jmeno');
$stmt->bindParam(':jmeno', $meno);
$stmt->execute();
?>
XSS útoky umožňují útočníkovi vložit škodlivý kód (například JavaScript) do vaší aplikace, který se vykoná v prohlížeči uživatele. CSRF útoky se zaměřují na zneužití existujících přihlášení uživatele na vykonání nežádoucích akcí.
Pro ochranu proti XSS používejte funkci htmlspecialchars()
při zobrazení údajů uživatele a pro ochranu proti CSRF přidejte do formulářů tokeny, které ověřují platnost požadavku.
Bezpečnostní hlavičky mohou výrazně zlepšit ochranu vaší aplikace. Například hlavička Content-Security-Policy
pomáhá zabránit načítání škodlivého obsahu z neznámých domén a hlavička X-Frame-Options
zamezí vložení stránky do iframe, což chrání proti clickjacking útokům.
Příklad nastavení hlaviček:
<?php
header("Content-Security-Policy: default-src 'self';");
header("X-Frame-Options: DENY");
?>
Správné zabezpečení hesel je nezbytné pro ochranu uživatelských účtů. Hesla nikdy neukládejte v plain-text formě. Použijte funkci password_hash()
pro vytvoření hashů hesel a password_verify()
pro ověření hesel při přihlášení.
Příklad:
<?php
$heslo = 'tajnehheslo';
$hash = password_hash($heslo, PASSWORD_BCRYPT);
if (password_verify($heslo, $hash)) {
echo 'Heslo je správné';
} else {
echo 'Heslo je nesprávné';
}
?>
Bezpečnost je klíčová pro každou aplikaci. Použitím správných technik na ochranu proti SQL injection, XSS a CSRF a zabezpečením vstupů a hesel můžete vytvořit robustní a bezpečnou aplikaci. Pokud chcete získat více praktických dovedností v PHP, vyzkoušejte náš kurz PHP – Programování dynamických webových stránek v PHP a úvod do AJAXu.
Viac informacií preberáme na kurze:
Kurz PHP - Programování dynamických webových stránek v PHP a úvod do AJAXu
Marián Knězek