0

URL を作成するurlencodeときは、最初に URL を作成し、URL から $_GET 値を取得したら、まずurldecode($_GET['param'])URL パラメーターを作成してから使用します。

これで十分ですか、それとも URL インジェクション ハッキング用に何か追加する必要がありますか。

注: get フォームに入れるパラメーターには、'文字を含めることができます。'だから私はどんな場合でもキャラクターを削除したくありません。

4

2 に答える 2

1

それは私の知る限り、攻撃を防ぐために使用されていません。エンコードとデコードは、サーバーがリクエストを明確に解釈することを確認するだけです。同様に、アドレス バーに正しい URL アドレスを入力しないと、ブラウザは入力内容をエンコードして Google に送信します。そうすれば、Google サーバーはどの部分がデータでどの部分がそうでないかを認識します。したがって、攻撃が可能である場合、クライアント データを間違った方法で使用すると、攻撃を受ける可能性があると思います。

あくまでも意見ですけどね。次のようなものを使用してみてください:

$url = filter_var($_GET['param'], FILTER_SANITIZE_URL);

これにより、返されるものが適切なURLまたはNULLであることが確認されます。あくまで私の意見ですが。上記のコードは、解析されたデータが URL であることを確認することを前提としています。

ただし、注意してください。

于 2013-03-20T18:25:39.343 に答える
0

いいえ、入力の二重 URL デコード (urldecode($_GET['param'])の値$_GETは既に URL デコードされているため、事実上そうなります) は、あらゆる種類のインジェクション攻撃を防ぐために何もしません。結局のところ、すべての文字列に対して次の同一性が保持されます。

$string === urldecode( urlencode( $string ) )

したがって、攻撃者が任意の文字列を入力としてフィードしたい場合、エクストラを回避するために必要なurldecode()のは、入力文字列を URL エンコードすることだけです。


urlencode()URL に含めたい文字列に対して (1 回だけ!)を使用することは、もちろん、どのような場合でも正しいことです。これにより、結果の URL が適切な形式になり、その中のパラメーターが正しくなることが保証されるからです。$_GET配列にデータを入力するときに PHP によってデコードされます。ただし、通常、URL エンコーディングを2 回行っても意味がありません。

于 2013-03-20T18:48:55.980 に答える