2011-02-06 17 views
8

ええ、私は本当に不安を抱かせることはできませんが、できるかどうか疑問に思っていました。このPHPリダイレクトは安全ではありませんか?

相続コード:

header("Location: http://example.com/search/{$_POST['term']}/{$_POST['type']}"); 

私はリダイレクトてるサイトがあまりにも自分の側の検証&サニタイズを行いますが、私は心配ですがある - このリダイレクトは、上の(任意の方法で安全ではありません私の側は私が直接使用しているように見ている$_POST 's)。

すべてのサポートをよろしくお願いします。

PS:私が常にunsanizitedユーザ入力を使用することは危険であると考えられていたので、ちょっと不思議に思っただけです(または、少なくともXSSとSQLiに当てはまります)。

+0

これを見るとセキュリティ上の問題はありません。あなたがドメインAを所有しており、あなたが制御しないドメインBにユーザをリダイレクトしているとすれば、それ自体は何の問題も生じないはずです。 –

+0

残念ながら安全です: 'urlencode()'はあまりタイプしません。 – mario

答えて

7

全体的に、現代版PHPを実行しているほとんどのWebサイトでは、は安全ですです。

手に2つの懸念があります。

  • は、悪意のあるユーザーがへのPOST悪意のあるページにそれらをリンクすることによって無意識のうちにサイト上のフォーム/search/*/*の任意のページを訪問しに被害者をだますことができるかもしれあなたのリダイレクトのページ。 (/searchのPOST変数にはスラッシュが含まれている可能性があるため、2つのスラッシュに限定されるわけではありません)。これは、誰かにリダイレクトする短縮されたbit.ly URLを渡すのと似ています。
  • HTTP response splitting。悪意のあるユーザーがPOSTデータ内に改行(具体的にはCRLF/\r\n)を含むと、header()呼び出しで複数のヘッダー(ヘッダー、Cookieの設定など)が出力されることがあります。ただし、PHP 5.1.2 this has been fixed以降。
+0

ありがとう!、これで学んだ。 – newbtophp

0

はい、非常に安全です。チェックされていないユーザー入力をスクリプトに入れてはいけません。 で、filter_input_arrayを使用して$ _POST配列を消毒してから何かをすることをお勧めします。

+0

あなたは明確にできますか?どのようなセキュリティ問題が発生する可能性がありますか? –

+0

これは、リンク先URLでのXSSブルーツフォースの脆弱性です。ここに問題はないように思えますが、whitehatのプログラマは、構築されたURLにユーザの入力を許可してクライアントのサーバにrootアクセスできるのを見ました。 –

+0

@Brianあなたは黙認できますか? filter_input_arrayにはさまざまなフィルタが用意されています。正確な脆弱性を理解しているため、どちらが適切かを少し混乱させています。 – newbtophp

0

リダイレクトされたURLをクライアントから受け取るWeb層が、URL全体の検証を実行することをお勧めします。そうすればおそらく安全です。しかし、リダイレクトを送信する前に、単純な検証によって2つのフィールドを実行することは害ではありません。

2

これはセキュリティ上の問題ではありませんが、これらの引数はurlencode($_POST['term'])でURLエンコードする必要があります。

+0

これは良い修正です。私は["rawurlencode'](http://www.php.net/manual/en/function.rawurlencode.php)を使うことができます。これは、"リテラル文字を特別なURLデリミタとして解釈するのを防ぐ "ためです。 – ide

+0

ありがとうございました! – newbtophp

-1

私はこの価値があると思います。read

+0

これはリンクのみの回答であり、リンクは現在死んでいます。アーカイブされたバージョンを確認すると、私が見る限り、この特定の問題については実際には話していないことがわかります。 –

関連する問題