2010-12-01 3 views
4

をコードする脆弱なコードXSS、ここでリターンURL

<?php header("Location: ".$_POST['target']); ?> 

清掃されているターゲットに入って来てください嫌なことをする適切な方法は何ですか?

+0

ええと、脆弱性は何ですか? – zerkms

+0

@zerkms:彼は非衛生的なユーザー入力を使用しています。 –

+0

@Matt Ellen:だから何?それを使って攻撃者は何をすることができますか? – zerkms

答えて

4

まずアップ、この脆弱性である

OWASPは「未検証のリダイレクトとフォワード」としてそれを分類しています。 OWASP's guide for more informationを参照してください。

いくつかの面白い攻撃が可能です。これがどのように悪用されるかについては、this thread on sla.ckers.org for ideasを参照してください。

あなたはどうやって自分を守っていますか?

  • URLのスキームを確認してください。通常、httpとhttpsだけをサポートしたいとします。他のスキームの要求を中止します。
  • URLを解析し、ドメインを抽出します。ドメインの既知のリストへのリダイレクトのみを許可します。他のドメインの場合は、要求を中止します。

それはそれです。

+0

OWASPはGETでのみ意味があります – zerkms

+0

脆弱性がある場合は、「脆弱な」コードをハックしようとすることができます。質問のコメントにリンクを追加しました。 – zerkms

+0

@zerkms - あなたのコードにはCSRFトークンがありますが、元の質問にはそのような保護はありません。あなたは同じことを比較していません。 –

0

脆弱性はありません。

$_POST['target']に何かを入れることはできますか?彼は彼が望むページにリダイレクトされます。アドレスバーに別のURLを入力するか、このページのいくつかの文字を火薬で変更した場合と同じです。

CSRFタイプの攻撃を心配している場合は、その攻撃から保護してください。

UPD:それは脆弱であると私downvotes誰が考えている人に

(真実のためのdownvoteに感謝し、あなただけちょうどdownvote、あなたは何も言うことはありませんが確認さ):

このコードをhttp://pastebin.com/Jw4Zp3F5とし、それが脆弱であることを証明してください。

UPD 2:だから

、1週間は左。私はセキュリティ記事へのリンクをたくさん持っており、は脆弱性であるという大きな言葉をたくさん読んでいます。しかし、NOONEはそれが本当にあることを証明しました。

脆弱性がある場合は、なぜ私のスクリプトに基づいてそれが証明されていないのですか脆弱な行?あるいはあなたができることはすべて、記事を指し示すだけで、それ以上は何もないのですか?

+0

私はそれを "* XSS *の脆弱性はありません"とし、より明確にします。 –

+0

@Col。 Shrapnel:脆弱性はまったくありません。ヘッダーの場所は、いかなる脆弱性の原因でもありません。 – zerkms

+0

-1これは明らかで絶対的な違反であるので、あなたはowaspについて聞いたことがないと思います。 – rook

1

古いバージョンのPHPでは、これはCRLF injection vulnerabilityとなります。しかし、これは修正されており、現在はOWASP A10 violationです。あなたの質問に答えるために、はいこれはOWASPに違反するので脆弱です。

+0

コードを注入できるので脆弱です。 OWASPがそう言っているかどうかは関係ありません。 – Gumbo

+0

@ Gumbo、自分のリクエストに対する応答のHTTPヘッダーを使ってどのような正確な脆弱性を作成できますか? –

+0

@ÁlvaroG. Vicario:CSRFが何をするかを推測してください。リクエストは意図的にユーザーによって開始されてはなりません。 – Gumbo

0

あなたのデザインと要件によって異なります。しかし、私は、ユーザーからの全体のパスを求めるのではなく、差別化のパスを尋ねて自分のイニシャルを追加すると思います。私はhttp://HOSTNAME/ $ userGivenPath

を意味します。第2に、有効なパスを知っていれば、有効なパスに対してユーザーからのエントリを検証します。

第3に、今すぐ直接$ _POST ['path']を使用している場合、後でrequire $ _POST ['']のような別の場所で使用することもできます。したがって、POSTを使用するあなたのやり方は危険です。だから、あなたは\ ..、\ .. \ ..などのファイルパスをフィルタリングする必要があります。

関連する問題