在我遇到哈希替换的应用程序中通过以下方式完成:
var loc = window.location + ''
loc = loc.substr(0, loc.indexOf('#'))
loc += '#somehash'
location.replace(loc)
而不是:
location.hash = '#somehash'
现在,当我们使用来自window.location的数据调用location.replace
时,DOMinator Pro会对此提供“URL重定向JSExecution”警告。我现在想知道的是这是否是一个真正的威胁,因为我无法想到攻击者可以滥用它来执行URL重定向攻击的方式。
这是真正的攻击媒介还是假阳性?
答案 0 :(得分:2)
我同意其他答案,这可能是误报。不过,正如Bergi的slice
示例所示,使用此类代码犯错很容易。
在modern browsers中,此代码可以更清晰地写为:
var loc = new URL("#somehash", location);
location.replace(loc);
这可以避免任何巧妙搞乱URL操作的可能性。
答案 1 :(得分:1)
根据this article,我会说这是一个误报攻击向量,注入网站的唯一已知方法是将#maliciouscode添加到你的URL栏中,但是你的函数忽略了#sclales,所以没有任何代码真正粘贴在网站上。
答案 2 :(得分:1)
有一个攻击媒介,但我想不出它在你的情况下无法使用的方式。
但是,建议的代码肯定更清晰,更不容易出错,因此更安全。
如果您使用slice
方法而不是substr
,我可以设计一个示例攻击。应该没有区别,应该吗?然后尝试使用位置http://example.com
(没有尾部斜杠)。如果您使用
loc = loc.slice(0, loc.indexOf('#'));
然后你将以http://example.co#somehash
结束,这可能是攻击者注册的。