考虑以下link_to示例:
link_to "Personal Website", @user.website
如何保护它免受XSS攻击。
用户表位于外部数据库中,因此我无法信任它。我尝试过使用sanitize和h的不同方法,但是当我在本地数据库用户网站上用javascript:alert('XSS')
替换时,当我点击链接时,javascript仍在执行。
提前致谢,
答案 0 :(得分:1)
您可以删除控制器中的“javascript:”。这很丑陋但有效,有一些警告(浏览器很棒,他们可以接受的是“javascript:”)。这不是一个非常强大的控制。
您可以静态地将“http://”(或“https://”)添加到链接href,并从用户输入中删除它。因为“javascript:”只有在href的第一个字符处才有效,静态添加http://作为开头减轻XSS。
您还可以使用Content-Security-Policy
header来阻止内联Javascript运行。这会对你如何构建代码产生影响,并不是所有浏览器都支持,但当 被支持时,它是一个很好的控制。
与往常一样,实施多层防御(以上的多个)将使您的应用程序更加强大,更安全,免受攻击。