その他の考慮事項:
1。あなたはブルートフォースに対して脆弱です
辞書攻撃はあなたのパスワードをクラックするでしょう。大多数のユーザーは安全でないパスワードを持っているので、それは時間の問題です。キャプチャを使用するか、無効なエントリをログに記録します。または、パスワードが正しくない場合は遅延を追加します。
シュラプネル大佐が言ったように、レインボーテーブルは、誰かがたくさんのハッシュを持っていて、それらをクラックしたいときに使用されるので、あなたには関係ありません。塩はレインボーテーブルに対するある程度の保護を得るために使用されますが、これはあなたの場合ではありません。
2。パスワードをクリアテキストで送信しています
誰かがあなたのログインを盗聴した場合(たとえば、wifi)、あなたは運命にあります。公開鍵を使用して何でも暗号化できるjavascriptライブラリがいくつかあります。 SSLを使用したくない場合は、ログイン/パスワードを暗号化し、サーバーに送信し、秘密鍵を使用して復号化すれば、より安全になります。
3。 MySQLでプリペアドステートメントを使用することを検討してください
プリペアドステートメントを使用すると、悪意のある入力があっても安全に実行できるため、SQLインジェクションの防止に役立ちます。
$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。クライアント側の検証を中継しないでください
ログインフォームで、JavaScript関数を中継してEnterキーが機能しないようにします。 Javascriptを無効にするとどうなりますか?非表示フィールド(例:)を使用し、関数を使用してEnterキーを防止し、onSubmit()関数を使用してFormIsValidを1に変更することができます。フォームを送信します。サーバーで、FormIsValidを確認します。
5。セッションハイジャックに対して脆弱です
セッションはCookieに保存され、デフォルトではPHPSESSIDという名前になります。攻撃者がそのCookieを取得できる場合、攻撃者はそれをサーバーに送信してセッションを盗む可能性があります。これを防ぐには、ユーザーIPアドレスとユーザーエージェントをセッションに保存し、リクエストごとにセッションから受け取った値を比較します。値が一致しない場合は、ユーザーIPが変更されているか、セッションが乗っ取られている可能性があります。
6。セッション固定に対して脆弱になる可能性があります
上記のように、誰かが管理者にサイトにアクセスするように説得し、このサイトがリクエストにPHPSESSIDを使用してリクエストをサイトに送信すると、サイトはセッションを作成し、ログイン/パスワードを処理し、資格情報が間違っていると述べます。今まで悪くない。
その後、管理者がポータルにログインし、セッションがすでに存在し、ログインとパスワードが一致し、セッションが更新されます。変数valid 現在は1です。
変数が更新されるとすぐに、攻撃者はPHPSESSIDを知っているため、ポータルに完全にアクセスできます。サイトはセッションハイジャックやセッション固定を阻止しません。
セッション固定とハイジャックを回避するには、#5を参照してください。