我有一個登錄頁面https://example.com/login#destination
其中destination
是用戶試圖瀏覽時,他們需要登錄到目標網址導航之前相對。
(即https://example.com/destination
)確保URL是通過JavaScript的location.replace()
中的JavaScript我想使用是
function onSuccessfulLogin() {
location.replace(location.hash.substring(1) || 'default')
}
這將導致XSS漏洞,攻擊者提供的鏈接
https://example.com/login#javascript:..
此外,我需要防止導航到一個相似的網站後登錄。
https://example.com/login#https://looks-like-example.com
或https://example.com/login#//looks-like-example.com
如何調整onSuccessfulLogin
以確保哈希#
部分提供的URL是相對URL,而不是與javascript:
,https:
,//
或其他任何絕對的導航方案開始?
一個想法是評估該網址,並在導航前查看location.origin
是否保持不變。您可以建議 如何做到這一點,或更好的方法?
首先想到發生在我身上的是一個ajax HEAD請求...然後成功重定向 – charlietfl
沒有足夠的數據來制定一個完整的解決方案,但是爲了使事情變得簡單一些,並且對代碼更加友好,我可以借給你我的JavaScript位置構造函數,可以按照以下方式使用它。 'var loc = new Loc(sURL); loc = loc.hash.split(「#」)[1]; if(/javascript|http/i.test(loc.protocol)){loc.hash = default;位置= loc.href};'但我仍然需要更好地澄清情況。 –
@GeorgeBailey,當然不是 - 但是如果你還沒有很好地閱讀:我的原始答覆是我說「我可以借給你」,以防你喜歡我的主張。 –