URL を作成するurlencode
ときは、最初に URL を作成し、URL から $_GET 値を取得したら、まずurldecode($_GET['param'])
URL パラメーターを作成してから使用します。
これで十分ですか、それとも URL インジェクション ハッキング用に何か追加する必要がありますか。
注: get フォームに入れるパラメーターには、'
文字を含めることができます。'
だから私はどんな場合でもキャラクターを削除したくありません。
URL を作成するurlencode
ときは、最初に URL を作成し、URL から $_GET 値を取得したら、まずurldecode($_GET['param'])
URL パラメーターを作成してから使用します。
これで十分ですか、それとも URL インジェクション ハッキング用に何か追加する必要がありますか。
注: get フォームに入れるパラメーターには、'
文字を含めることができます。'
だから私はどんな場合でもキャラクターを削除したくありません。
それは私の知る限り、攻撃を防ぐために使用されていません。エンコードとデコードは、サーバーがリクエストを明確に解釈することを確認するだけです。同様に、アドレス バーに正しい URL アドレスを入力しないと、ブラウザは入力内容をエンコードして Google に送信します。そうすれば、Google サーバーはどの部分がデータでどの部分がそうでないかを認識します。したがって、攻撃が可能である場合、クライアント データを間違った方法で使用すると、攻撃を受ける可能性があると思います。
あくまでも意見ですけどね。次のようなものを使用してみてください:
$url = filter_var($_GET['param'], FILTER_SANITIZE_URL);
これにより、返されるものが適切なURLまたはNULLであることが確認されます。あくまで私の意見ですが。上記のコードは、解析されたデータが URL であることを確認することを前提としています。
ただし、注意してください。
いいえ、入力の二重 URL デコード (urldecode($_GET['param'])
の値$_GET
は既に URL デコードされているため、事実上そうなります) は、あらゆる種類のインジェクション攻撃を防ぐために何もしません。結局のところ、すべての文字列に対して次の同一性が保持されます。
$string === urldecode( urlencode( $string ) )
したがって、攻撃者が任意の文字列を入力としてフィードしたい場合、エクストラを回避するために必要なurldecode()
のは、入力文字列を URL エンコードすることだけです。
urlencode()
URL に含めたい文字列に対して (1 回だけ!)を使用することは、もちろん、どのような場合でも正しいことです。これにより、結果の URL が適切な形式になり、その中のパラメーターが正しくなることが保証されるからです。$_GET
配列にデータを入力するときに PHP によってデコードされます。ただし、通常、URL エンコーディングを2 回行っても意味がありません。