Další body k zamyšlení:
1. Jste zranitelní vůči bruteforce
Slovníkový útok by prolomil vaše heslo. Protože naprostá většina uživatelů má heslo nezabezpečené, je to jen otázka času. Použijte captcha nebo zaznamenejte neplatné položky. Nebo přidejte nějakou prodlevu, když je heslo nesprávné.
Jak řekl plukovník Shrapnel, duhová tabulka vás nezajímá, protože se používají, když má někdo spoustu hashů a chce je rozlousknout. Sůl se používá k získání určité ochrany před duhovým stolem, a to není váš případ.
2. Hesla posíláte jako prostý text
Pokud někdo přičichne k vašemu přihlášení (např. wifi), jste odsouzeni k záhubě. Existuje několik knihoven javascript, které mohou šifrovat cokoli pomocí veřejných klíčů. Pokud nechcete používat SSL, zašifrujte přihlašovací jméno/heslo, odešlete na server, dešifrujte pomocí soukromého klíče a jste ve větším bezpečí.
3. Zvažte použití připravených příkazů na MySQLu
Použití připravených příkazů pomáhá proti injektáži SQL, protože může bezpečně běžet i se škodlivým vstupem:
$dbc = new mysqli("mysql_server_ip", "mysqluser", "mysqlpass", "dbname");
$statement = $db_connection->prepare("SELECT * FROM table WHERE thing='?'");
$statement->bind_param("i", $thing);
$statement->execute();
4. Nespoléhejte na ověřování na straně klienta
Ve vašem přihlašovacím formuláři se spoléháte na funkci javascriptu, která brání funkci klávesy Enter. Co když zakážu Javascript? Můžete použít skryté pole (např. ), pomocí své funkce zabránit klávese Enter A pomocí funkce onSubmit() změnit FormIsValid na 1 před odeslání formuláře. Na svém serveru ověřte FormIsValid.
5. Jste zranitelní vůči únosu relace
Vaše relace se uloží do souboru cookie, ve výchozím nastavení s názvem PHPSESSID. Pokud by útočník mohl získat tento soubor cookie, mohl by jej odeslat na váš server a ukrást vaši relaci. Abyste tomu zabránili, můžete uložit IP adresu uživatele a uživatelského agenta v relaci a porovnat hodnotu přijatou z relace při každém požadavku. Pokud se hodnoty neshodují, mohla se změnit IP adresa uživatele nebo mohla být relace unesena.
6. Můžete být zranitelní vůči fixaci relace
Jak je uvedeno výše, pokud někdo přesvědčí vašeho administrátora, aby vstoupil na nějaký web, a tento web odešle na váš web požadavek s PHPSESSID na požadavku, váš web vytvoří relaci, zpracuje přihlašovací jméno/heslo a uvede, že přihlašovací údaje jsou chybné. . Až do teď to není špatné.
Později se váš administrátor přihlásí do vašeho portálu, relace již existuje, přihlašovací jméno a heslo se shodují a relace je AKTUALIZOVÁNA. Proměnná platná nyní je 1.
Jakmile je proměnná aktualizována, útočník má plný přístup k vašemu portálu, protože zná PHPSESSID, váš web nebrání únosu relace ani fixaci relace.
Chcete-li se vyhnout fixaci relace a únosu, viz #5.