web-dev-qa-db-ja.com

document.location JavaScriptコマンドを挿入するときに、document.locationの変更を防止します

テスト中にアプリケーションに反映された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>
4
SaAtomic

ハッシュフラグメントを使用します。

/'.replace(/^.*$/, document.location+"#")document.location='/'.replace(/^.*$/, document.location+"#")につながり、基本的には現在のURLを取得し、その後にハッシュフラグメントを置きます。 hashfragmentsはbroswersではそうしないので、ページをリロードしません。

;alert(1)のように、後で好きなように配置します。

元のコードには'(つまりdocument.location='/')が含まれているため、コメント(//または/*)を使用するか、最後の文字列値が閉じられていません(つまり、var x='My Stringを書き込んで、元の'で文字列を閉じます)。そうしないと、解析エラーが発生し、JavaScriptがまったく実行されません。

2
Xenos