JavaScript framekiller and XSS vulnerability
所有已知的JavaScript框架杀手是否都容易受到XSS的攻击?
如果是,在脱离iframe之前谁足以消毒window.location?
最好的方法是什么?
您能否举一个可能的XSS攻击示例?
谢谢!
UPD:我问的原因是因为我收到一个漏洞扫描警报,说包含top.location.replace(document.location)的JS framekiller代码易受XSS攻击,因为document.location由用户控制。
- 您为什么认为有XSS问题?破坏帧技术通常与XSS根本不相关,它们旨在处理欺骗和点击劫持。
-
您是否在要求代码来避免框架杀手?框架中加载的基于JS的解决方案也可以被访问,修改和被欺骗,是的。
-
@JeremyBanks我已经更新了问题,以澄清我问这个的原因
-
@Smamatti不,我不是在寻找杀人狂。请看我的更新
-
您所说的与XSS无关。无论如何,由于相同的原始策略,它们无法在您的框架中运行代码。
-
@BenjaminGruenbaum,那么我可以更改些什么来消除该漏洞扫描警报?
-
我从什么工具获得"漏洞扫描警报"?
-
@BenjaminGruenbaum alertlogic.com/solutions/security/vulnerability-assessment
-
@BenjaminGruenbaum :)谢谢
描述中正确的是:\\'document.location \\',\\'window.location \\',\\'self.location \\'等变量(部分)由不受信任的用户控制。这是因为选择了非信任域和页面位置(\\'http://non.trusted.domain.com/mypage \\')中的(sub)字符串以及非信任请求字符串(\\'http:// my.domain.com/?myrequest \\')是根据用户的意图形成的,不一定总是对您有好处。
出了什么问题:此用户依赖性不一定是XSS漏洞。实际上,要形成XSS,您将需要一些代码来有效地使用页面输出流中某处不受信任的用户控制的内容。在像top.location.replace(window.location)这样的简单framekiller的示例中,没有XSS的危险。
我们可以谈论XSS的一个例子是类似
的代码
document.write('Click here')
像http://test.com/?dummy"alert("Test")"dummy那样构造URI并替换为document.location,由您的代码代替会在可信网页的上下文中触发不可信脚本。由于构造此类URI并将其不转义传递是一个挑战,因此真正的XSS可以在一些更复杂的场景中工作,这些场景涉及将不可信变量逐字插入语言指令流中,例如HTML,CSS,JS,PHP等。
另一个不了解XSS的开发示例是发明JSON的历史。尽管JSON受到了极大的欢迎(也吸引了我的支持者),但最初它是作为"快速n脏"方式将JS数据存储为纯JS格式的数据结构。为了"解析" JSON块,只需要eval()就足够了。幸运的是,人们很快意识到了整个想法的缺陷,因此,如今,任何精通头脑的开发人员都将始终使用适当的安全JSON解析器。
- 非常感谢您提供详细的答案!现在我已经确认了framekiller代码的安全性,剩下的唯一问题是我该怎么做才能防止该扫描警报...
-
我重新格式化了答案,以将正确的代码显示为SO ate 标记。您是否有任何接收到警报的具体代码,或者您只是在寻找一些不产生警报的框架杀手?到目前为止,您尝试过什么代码?关于使您的代码适应问题的另一种想法是AlertLogic,您可能会在使它变得更加复杂以避免可能出现警告时引入真正的XSS。因此,请在显示您摆脱XSS和摆脱XSS之间权衡实际需求。
-
是的,我有具体的代码,它很简单,就像if (parent.frames.length > 0) top.location.replace(document.location);一样,并且我确实知道我可能会尝试通过使其更复杂来引入真正的XSS。同时,我们无法保证更复杂的代码不会引起扫描警报