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