ここで同様の質問が何度も出されていることは知っており、それらすべてを読むのに時間を費やしましたが、アプリケーションが安全になるかどうかはまだ確信が持てません...
私が構築している Web サイトでは、ユーザーがデータベースに投稿したり、自分の投稿を編集したり、他の投稿を検索したり、他のユーザーからの投稿を表示したりできます。明らかに、大量のユーザー入力データとフォーム データがあり、それらが安全であることを確認する必要があります。
だから、これが私のプロセスが現在どのように機能するかです:
- ユーザーは、$_POST データに変換される HTML フォームにデータを入力します。
- posthandler.php ファイルは、すべての $_POST データを $_SESSION データに変換します
- $_SESSION データは $this-> クラス変数に変換されます
- $this-> クラス変数は mySQL クエリで使用され、DB に入力されます
- DB からのデータは HTML で表示されます。
Web サイトのセキュリティを確保するために、どの手順でどのような対策を講じる必要がありますか? (コードインジェクションと XSS の防止)
今のところは以下のように考えています。間違っていたら訂正してください。
1.私には制御できないため、データは完全に脆弱です。
したがって、2.データが特定のパターンに一致するかどうかを確認する必要があります.式、... ) このようにして、たとえば、1 から 10 の間の値を期待し、誰かが「'--DROP table;」と言った場合を防ぐことができます。代わりに、これらのフィールドが安全であることを確認済みです。もちろん、ユーザーがメッセージを入力できるテキスト ボックスほど制限されていないフィールドは、依然として脆弱です。
ステップ 3 については、前のステップですべて正しく行った場合、何もする必要はありませんよね? 攻撃者が SESSION データまたはクラス変数を変更できないようにする必要があります。ただし、サーバー側で重大なセキュリティ違反が発生した場合を除きます。これは、ホスティング プロバイダーが責任を負うべきものです。正しいですか?
ステップ 4 では、クエリを実行します。データがコマンドとして処理されないように、データを mysqli_real_escape_string() でエスケープする必要があります。
ステップ 5 では、すべての特殊文字をそれぞれの HTML コード スニペットに変換する予定です。たとえば、すべて
"
が変換さ"
れます。
各ステップで適用する必要がある追加のセキュリティ対策/フィルターはありますか?
手順 2. で間違いを犯した場合はどうすればよいでしょうか。) またはフィールドの正規表現を見つけることができません。$_POST から $_SESSION に変換するだけで、それ以上の検証は行いません。クエリ中に mysqli_real_escape_string() を使用し、ブラウザに表示される前にすべての文字をフィルタリングすることで、私のお尻を節約できますか?
あなたの洞察を楽しみにしています!