====== Autentizace a autorizace ====== ===== Úvod ===== * Jaký je rozdíl mezi autentizací a autorizací? * Jak ověřit identitu uživatele (jméno a heslo) a jak tyto informace ukládat? * Jak si přihlášení //zapamatovat// napříč více HTTP požadavky? ===== Přihlášení ===== * Vytvořte stránku s přihlašovacím formulářem (uživatelské jméno a heslo). * Zajistěte, aby heslo zadávané ve formuláři nebylo vidět na obrazovce. * Prodiskutujte tyto teoretické mechanismy ukládání hesel a uvažte jejich (ne)dostatky: * Plaintext * Šifrované * Hashované (MD5, SHA-1) * Solené (password_hash) * Naimplementujte mechanismus ověření jména a hesla pomocí PHP funkcí ''password_hash'' a ''password_verify'' * Uvažte, jaké možnosti má nyní útočník ===== Udržení přihlášení ===== * Uvažte, //kam a jak// lze informaci o úspěšné autentizaci uložit * Naimplementujte mechanismus ukládání do PHP session * Uvažte, jaké možnosti má nyní útočník ===== CSRF ===== * Připomeňte si, která použitá technika umožňuje útok CSRF * Vyzkoušejte si provést útok CSRF na vlastní aplikaci (nejprve GET, poté POST) * Upravte vytvořenou aplikaci tak, aby zabraňovala možným CSRF útokům pomocí jednorázového tokenu * Prodiskutujte další varianty ochrany proti CSRF ===== Materiály ===== * [[https://www.php.net/password_hash]] * [[http://www.michalspacek.cz/clanky|Michal Špaček - Webová bezpečnost]] * [[https://crackstation.net/hashing-security.htm| Salted Password Hashing]]