1

PHP では、GET/POST リクエストを処理するとき、それらをチェックする必要があります。なんらかのハッキングだとしたら、どうすればいいですか? die();「dontHackMe」だけで?

4

2 に答える 2

3

いいえ、die()「dontHackMe」だけではいけません。そのための 2 つの結果が表示されます。

  1. ユーザーに悪意がなく、それがバグまたは正直な問題である場合、ユーザーに助けを求める手段を提供していません。
  2. これは実際には非常にアマチュア的な対応であり、実際の攻撃者がさらにセキュリティ ホールを探すように仕向ける可能性さえあります。

HTTP は、応答のステータス コードのリストを定義します。正しいものを選択し、そのコードと何らかのデフォルトの応答ページで応答するだけです。

たとえば、リクエストの形式が正しくないか、何らかの形で正しくない場合は、400 (Bad Request) レスポンス コードが適しています。応答の実際のページは、それが不適切な要求であったことを示し、ユーザーが必要に応じてヘルプを求めるためのオプション (サイトのヘルプ セクションへのリンクや連絡フォームへのリンクなど) を提供する必要があります。 .

この応答構造の理由は 2 つあります。

  1. 役に立つページを提供することで、人々が見て評価できる人間が読める形式の出力を作成し、アプリケーションをよりユーザーフレンドリーにします。
  2. 応答で正しいステータス コードを返すことにより (潜在的なハッキングの試みを拒否しただけでなく、すべての応答を返します)、自動化されたクライアントがアプリケーションとより効果的に対話するために使用できる機械可読インターフェースを作成します。(たとえば、400 応答は、悪意のない自動化されたクライアントに、もう一度その要求を行う必要さえないことを伝えます...要求は受信および処理され、不良であることが判明しました。)

編集:明確にするために...これは、本当に悪いリクエストに対応するためのものです。フォームで送信されたデータが単純に間違っている場合 (ビジネス ルールを満たしていない、数値が意図された文字を使用しているなど)、Michael Hampton は完全に適切な提案を提供します。基本的に、サーバーは「愚かなふりをして」、フォームを再表示するだけです。

潜在的な攻撃者に、彼らがすでに持っている以上の情報を与えないでください。(悪いエラー メッセージは、彼らが既に持っている情報よりも多くの情報であることに留意してください。) アプリケーションは単に、「うーん... このフォームを送信しようとしましたが、間違っています。もう一度やり直してください。」と言うだけです。

于 2012-07-11T08:06:15.830 に答える
1

HTTP ヘッダー自体に問題がない限り、HTTP 4xx 応答を送信しないでください。

クライアントから無効な入力を受け取った場合は、無効なフィールドが無効として強調表示されたフォームを再表示します。

于 2012-07-11T08:08:00.847 に答える