のJavaScriptのlocation.replace()を経由してナビゲートする前に相対的である。
(すなわちhttps://example.com/destination
)確認URLは、私は<code>destination</code>は、ユーザーが、彼らは、ログインする必要がありました際に移動しようとしていたターゲットURLでログインページ<code>https://example.com/login#destination</code>を持って
私が使用して考えていたJavaScriptはこのリンクを提供することにより、攻撃者は、XSSの脆弱性につながる
function onSuccessfulLogin() {
location.replace(location.hash.substring(1) || 'default')
}
ました
https://example.com/login#javascript:..
また、ログイン後に見た目のサイトに移動するのを防ぐ必要があります。
https://example.com/login#https://looks-like-example.com
またはhttps://example.com/login#//looks-like-example.com
どのように私はハッシュで提供されたURLを確認するためにonSuccessfulLogin
を調整することができます#
部分が相対URLで、javascript:
、https:
、//
または任意の他の絶対的なナビゲーションスキームで始まりませんか?
URLを評価し、ナビゲートする前にlocation.origin
が変更されていないかどうかを確認することをお勧めします。 あなたはこれを行う方法、またはより良いアプローチを提案できますか?
私に起こった最初の考えは、ajax HEADリクエストを作成することです...成功すると、リダイレクトされます – charlietfl
完全な解決策を試すには十分なデータがありませんが、少しシンプルで、次の方法で使用できるJavaScript Locationコンストラクタを貸してください。 'var loc = new Loc(sURL); loc = loc.hash.split( "#")[1]; if(/javascript|http/i.test(loc.protocol)){loc.hash = default; location = loc.href}; 'しかし、私はまだ状況をより明確にする必要があります。 –
@GeorgeBaileyもちろん、そうではありませんが、あなたがそれをよく読んでいないのなら、私は自分の提案が好きな場合に備えて、 "私はあなたのものを貸すことができます"と言っています。 –