Jak zabezpečit PHP aplikaci: Od validace vstupů až po ochranu session

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.

1. Validace a sanitizace vstupů (filter_input, htmlspecialchars)

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.

2. Prevence SQL injection (prepared statements, PDO)

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();
?>

3. Cross-Site Scripting (XSS) a Cross-Site Request Forgery (CSRF) – příčiny a řešení

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.

4. Bezpečnostní hlavičky v prohlížeči (Content-Security-Policy, X-Frame-Options)

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");
?>

5. Správa hesel a používání kryptografických funkcí (password_hash, salt)

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é';
}
?>

Závěr

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.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

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