だから私は、高セキュリティの php ユーザー システムを設計しようとしています。ログイン/セッションの終わりから始めることにしました。誰かに私の計画を見てもらい、抜け穴やセキュリティ上の欠陥を教えてもらいたいです。
このようなレベルでシステムを作成しようとするのはこれが初めてです。問題が見つかった場合は、それを修正するのに役立つリソースを送っていただけますか.
データベースへの接続 *ここでは MYSQL を使用するので、標準のデータベース接続はサイトのルート外のファイルに保存されます。
登録 *登録は簡単なフォームです。外部ファイルに保存されている関数を使用して、入力をサニタイズし、SQL インジェクションから保護しています。
// A function to sanitize input for data being input into a database
function sanitizeinput($rawinput) {
$sanitizedinput = mysql_real_escape_string($rawinput);
return $sanitizedinput;
}
この機能をこれ以上保護するために必要なものはありますか?
パスワードは、SHA-512 または BCrypyt のいずれかを使用してハッシュ化されます。少し調査したところ、MD5 はもはや十分に安全ではないと多くの人が言っているのを見てきました。可能な限り最高のセキュリティを確保したいので、何を使用すればよいでしょうか。パスワードをハッシュします。
また、次のスニペットを使用してランダムに生成されたソルトを追加しました。これは、ハッシュされたパスワードの前に追加されてから再ハッシュされました。その後、ソルトはプレーンテキスト形式でデータベースに保存されます。セキュリティを強化するためにこれを暗号化することを考えるべきですか?
ユーザーがログインすると、入力したパスワードがハッシュされ、データベースからのソルトが追加されて再ハッシュされ、データベースに保存されているパスワードと比較されます。
パスワードが一致すると、単一の IP アドレスとユーザー エージェントにロックされるセッションが作成されます。その後、セッションは短時間で期限切れになります。セッションはログイントークンを保存するためにのみ使用され、ユーザー名とパスワードはもちろんセッションに保存されません。
ユーザーがログインすると、ユーザー名が割り当てられたトークンがデータベースに保存されるため、トークンを使用してデータベースからユーザーの詳細を安全に取得できます。セッションに保存するリスクはありません。
パスワードが正しくない場合、ユーザーはログインできません...当然、これにもブルートフォース保護を適用します。3回試行すると、ユーザーのIPとユーザーエージェントが15分間ロックアウトされ、10回失敗するとブロックされますファイアウォールで。
何かを忘れているように感じますが、直接指を当てることはできません。
ヘルプやアドバイスをいただければ幸いです。