【问题标题】:When to use random tokens to prevent XSS?何时使用随机令牌来防止 XSS?
【发布时间】:2017-03-19 13:00:14
【问题描述】:

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

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

在防御表单上的 XSS 攻击时,最佳实践似乎是包含带有表单令牌的隐藏输入,然后在发布后检查令牌匹配。还有其他方法可以使这更安全。

我曾设想过一种攻击类型,但尚未找到解决方案。如果恶意站点加载了指向我站点的隐藏 iframe(例如,view-member.php?id=1234)并且由于受害者用户登录到我的站点,他们的会话会在该 iframe 中继续。是什么阻止了这个恶意网站遍历 ID 并撕毁数据以获取 PII?我是否应该为每个页面视图创建一个唯一令牌,并在页面加载时检查该令牌?

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

【问题讨论】:

    标签: security web


    【解决方案1】:

    事实上,每次您展示表单或任何类型的交互时,您都应该包含一个随机的、可验证的信息,该信息每次都会发生变化。这不是为了防止 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

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

    【讨论】:

    • 你是对的,它不是 XSS。我对滥用的术语表示歉意。但我的问题是,简单地显示信息怎么样?我是否需要使用令牌来验证真实用户是否请求查看该页面(而不是某些正在利用登录用户的脚本)?
    • 我编辑了我的答案,也许这可以帮助你更好地理解
    • 假设有一个页面 view-member.php 向登录用户显示一些 PII。信息可以在帖子上更新,但无需发布即可轻松阅读。我正在想象一个异地恶意页面,它会将隐藏的 iframe 加载到我的 view-member.php?id=1234 以利用已登录的跨站点用户。目标不是让他们发布任何信息,而只是为了撕掉来自请求页面的数据,从而获得 PII。
    • 测试可能场景的最简单方法是设置并测试它。您可以使用不同的域(使用您的主机文件)并尝试一下。
    • 在阅读了您关于同源政策的链接后,我意识到我担心的事情不可能发生。感谢您的回复。
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多