何时使用随机令牌来阻止XSS?

时间:2017-02-28 22:01:52

标签: security web

这不是特定于语言的问题,但我使用的是PHP5。

我正在开发一个有一定数量PII的项目。从法律上讲,我们需要通过黑客攻击来保护这些数据,因此我一直在研究防御常见攻击类型的最佳实践。显然,所有数据库调用都使用参数化查询,并且清理用户提供的所有数据以防止注入。我还实现了会话和方法来防止会话劫持。

当谈到防止对表单上的XSS攻击时,最佳做法似乎是包含带有表单令牌的隐藏输入,然后在帖子之后检查令牌匹配。还有其他方法可以使这更安全。

我想象过一种类型的攻击并且没有找到解决方案。如果恶意网站加载指向我网站的隐藏iframe(例如,view-member.php?id = 1234)并且因为受害用户登录到我的网站,他们的会话将继续在该iframe中。什么阻止这个恶意网站迭代ID和翻录数据以获得PII?我应该为每个页面视图创建一个唯一的令牌,并在页面加载时检查该令牌吗?

我不是百分百肯定,但假设我的网站使用HTTPS,浏览器应警告用户和/或阻止连接。那是对的吗?这有足够的安全性吗?

1 个答案:

答案 0 :(得分:0)

事实上,每当您呈现表单或任何类型的交互时,您应该包含随机,可验证的信息,每次都会更改。这不是用于阻止XSS,而是用于CSRF:https://en.wikipedia.org/wiki/Cross-site_request_forgery

主要问题是:攻击者只需向您的输入处理脚本发送自动请求,而无需经历"痛苦"手动填写表格(甚至访问您的页面)。

但是,您不能使用此技术阻止XSS攻击,因为XSS攻击主要是包含未通过输入验证过滤的可执行代码(javascript)的用户输入。因此,为了防止XSS,您应该始终确保不在任何地方提供未经过滤的用户生成的内容。

除非您使用仅允许来自受信任客户端访问您网站的客户端证书,否则HTTPS无法在任何一种情况下为您提供帮助。 HTTPS主要用作传输加扰器和身份验证器,但不会阻止机器人向您的表单发送有效(但恶意)的数据。

只要您遵循同源政策,在iFrame中托管网站并不会授予攻击者从目标网页读取Cookie或信息的权限(这会很糟糕):https://en.wikipedia.org/wiki/Same-origin_policy

有了这个,只有您列入白名单的域才能访问您网页上托管的信息。