テスト中にアプリケーションに反映されたXSSが見つかりました。ここで、渡される文字列を定義します。
<script language='JavaScript'>
document.location='/this-is-my-input'
</script>
たとえば、私の文字列は最初の/
の後にのみ記録されます。だから私はescape document.locationコマンドをURLエンコーディング/'//\nalert(1)
で管理しましたが、これはalert(1)
を実行しますが、すぐにルート/
にリダイレクトしますウェブアプリ。
ドキュメントの場所の変更を防ぐために何かできることはありますか?
編集:上記のユーザー入力を使用すると、コードは次のようになります。
<script language='JavaScript'>
document.location='/'//
alert(1)//'
</script>
ハッシュフラグメントを使用します。
/'.replace(/^.*$/, document.location+"#")
はdocument.location='/'.replace(/^.*$/, document.location+"#")
につながり、基本的には現在のURLを取得し、その後にハッシュフラグメントを置きます。 hashfragmentsはbroswersではそうしないので、ページをリロードしません。
;alert(1)
のように、後で好きなように配置します。
元のコードには'
(つまりdocument.location='/'
)が含まれているため、コメント(//
または/*
)を使用するか、最後の文字列値が閉じられていません(つまり、var x='My String
を書き込んで、元の'
で文字列を閉じます)。そうしないと、解析エラーが発生し、JavaScriptがまったく実行されません。