Bezpečnosť je kľúčovým aspektom každej webovej aplikácie. Ak chcete vytvoriť bezpečnú aplikáciu, musíte sa zamerať na ochranu proti rôznym typom útokov, ako sú SQL injection, Cross-Site Scripting (XSS) a Cross-Site Request Forgery (CSRF). Tento článok vám poskytne návod, ako správne zabezpečiť aplikácie v PHP a ochrániť ich pred týmito a ďalšími hrozbami.
Správna validácia a sanitizácia používateľských vstupov je základom ochrany pred rôznymi typmi útokov. Je dôležité vždy overovať, či vstupy od používateľov spĺňajú očakávané formáty, a zároveň ich sanitizovať, aby sa zabránilo škodlivým skriptom alebo neplatným údajom.
Príklad validácie:
<?php
$meno = filter_input(INPUT_POST, 'meno', FILTER_SANITIZE_STRING);
?>
Pri zobrazení týchto údajov na stránke používajte funkciu htmlspecialchars()
na ochranu proti XSS.
SQL injection je jedným z najbežnejších spôsobov, ako môžu útočníci manipulovať s databázou. Aby ste sa vyhli tomuto problému, používajte pripravované SQL dotazy s parametrami, ktoré automaticky zabezpečia vstupy.
Príklad použití PDO na pripravený dotaz:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$stmt = $pdo->prepare('SELECT * FROM uzivatelia WHERE meno = :meno');
$stmt->bindParam(':meno', $meno);
$stmt->execute();
?>
XSS útoky umožňujú útočníkovi vložiť škodlivý kód (napríklad JavaScript) do vašej aplikácie, ktorý sa vykoná v prehliadači používateľa. CSRF útoky sa zameriavajú na zneužitie existujúcich prihlásení používateľa na vykonanie nežiaducich akcií.
Pre ochranu proti XSS používajte funkciu htmlspecialchars()
pri zobrazení údajov používateľa a pre ochranu proti CSRF pridajte do formulárov tokeny, ktoré overujú platnosť požiadavky.
Bezpečnostné hlavičky môžu výrazne zlepšiť ochranu vašej aplikácie. Napríklad hlavička Content-Security-Policy
pomáha zabrániť načítavaniu škodlivého obsahu z neznámych domén a hlavička X-Frame-Options
zamedzí vloženiu stránky do iframe, čo zabraňuje clickjacking útokom.
Příklad nastavení hlaviček:
<?php
header("Content-Security-Policy: default-src 'self';");
header("X-Frame-Options: DENY");
?>
Správne zabezpečenie hesiel je nevyhnutné pre ochranu používateľských účtov. Heslá nikdy neukladajte v plain-text forme. Použite funkciu password_hash()
na vytvorenie hashov hesiel a password_verify()
na overenie hesiel pri prihlasovaní.
Príklad:
<?php
$heslo = 'tajneheslo';
$hash = password_hash($heslo, PASSWORD_BCRYPT);
if (password_verify($heslo, $hash)) {
echo 'Heslo je správne';
} else {
echo 'Heslo je nesprávne';
}
?>
Bezpečnosť je kľúčová pre každú aplikáciu. Použitím správnych techník na ochranu pred SQL injection, XSS a CSRF a zabezpečením vstupov a hesiel môžete vytvoriť robustnú a bezpečnú aplikáciu. Ak chcete získať viac praktických zručností v PHP, vyskúšajte náš kurz PHP – Programovanie dynamických webových stránok v PHP a úvod do AJAXu.
Viac informacií preberáme na kurze:
Kurz PHP - Programovanie dynamických webových stránok v PHP a úvod do AJAXu
Marián Knězek