通过location.replace替换hash是否有害?

时间:2014-07-28 14:53:49

标签: javascript security xss

在我遇到哈希替换的应用程序中通过以下方式完成:

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重定向攻击的方式。

这是真正的攻击媒介还是假阳性?

3 个答案:

答案 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结束,这可能是攻击者注册的。