Sandokan | 2a00:1028:96c6:834a:59b1:6e50:b36f:* | 14.8.2014 9:59 |
| Zajímavý článek, porovnávání MySQL mě opravdu překvapilo. Otestoval jsem tento problém s MySQLi za pomocí "prepared statement" a ani připravené dotazy vás neochrání.
A dále přidávám další z tisíce způsobů jak se ochránit:
V rámci optimalizace databáze je vhodné přidávat klauzuli "LIMIT 1" v místech, kde víte že dotaz vrátí právě jeden (nebo žádný) řádek. Pokud pak při ověření hesla z databáze vytáhnete 1 řádek, stačí si z něj načíst primární klíč (ID) a právě ten používat k načítání všech dalších informací (oprávnění).
Další ochrana je, pokud používáte na hesla osolené hashování. Pak potřebujete z databáze vytáhnout (zahashované) heslo pro konkrétního uživatele (opět trik s ID) a už vám jednoduše nepostačí dotaz typu "SELECT * FROM users WHERE login='$login' AND password='$password'". Tedy nelze najít v databázi všechny řádky pro které by heslo náhodou sedělo, protože ověření může provést pouze PHP skript. |
|