覚えておくべき最も重要なこと:
クライアントから戻ってくるものは何も信用しないでください
取得している情報(フォームフィールド(非表示のフィールドも含む)、セッション変数など)が有効であると思い込まないでください。サーバー側のロジックを使用してこれらのチェックを実行してください。
1.)セッションが暗号化されていることを確認します。PHPの組み込みセッションを使用している場合、関連するエントロピー(ランダム性)は比較的高いため、問題ないはずです。
2.)セッションIDのみをCookieに保存します。その他の情報は、そのIDを使用してサーバーに関連付ける必要があります。セッションでトークン'is_admin'= trueの場合、システムエンジニアが誰かが管理者であるかどうかを判断する多くのケースを見てきました。あなたは明らかにこれの問題を見ることができます。
コストのかかる操作であると不満を言う人もいますが、アクティブなセッション用に(my)SQLテーブルを作成することをお勧めします。次に、ページが読み込まれたときに、関連するデータをテーブルからプルして、他のデータと同じように処理します。一部のフレームワーク(CodeIgnitorなど)は、1つの構成アイテムを変更することでこれを実行します。
3.)IPに対して検証します-テーブルに、現在のIPアドレスを追加します。現在のIPがセッション内のIPと一致しない場合は、誰かがハイジャックしようとしている可能性があります。強制的にログアウトして終了します。
4.)ログイン試行に制限を設定します。1秒のsleep();を追加します。各ログインのサーバー側は、ユーザーには事実上気づかれませんが、自動化されたシステムの場合、ブルートフォースログインを事実上不可能にします。
5.)「おしゃべりすぎる」のを見てください。ログイン時に、「ユーザー名が存在しません」や「パスワードが正しくありません」などの説明的な誤りを与えると役立つと思うかもしれません。このような情報は、ハッカーが有効なユーザー名を取得したことを示します。これにより、ハッキングがはるかに高速になります。
6.)PHPとSSLの安全性、および独自のロジックについてはあまり気にしないでください。WebサイトがSSLを使用しているからといって、それが安全になるわけではありません。有効なロジックと組み合わせたSSLはセキュリティを提供します。
7.)SUPERに関心がある場合は、専用サーバーに移動することをお勧めします。サーバーでホストされている他のWebサイトがコード/データベース情報にアクセスできる可能性があります。彼らはあなたほど安全であるために必要な措置を講じていないかもしれません。
8.)同時セッションを許可しないでください。これにより、MITM(中間者)攻撃が防止されます。DBセッションアプローチのもう1つの利点は、2つのクライアントが異なるIPから同時にログインしようとした場合に、強制的にログアウトできることです。DBアプローチのさらに別の利点は、システムをスケーラブルにすることです(セッションストレージはファイルシステムに依存するため)。
9.)add_slashesの代わりにmysql_real_escape_stringを使用します
PHPのセキュリティに関する詳細情報が必要な場合は、私の専門です。自由に連絡してください。