如何避免对我们应用程序核心php的跨框架脚本攻击

信息安全 框架 跨框架脚本
2021-09-09 01:46:26

我根据客户的要求开发了一个在 core-php 中的 Web 应用程序。我的客户进行了漏洞测试,发现跨框架脚本是一个硬级别漏洞。

在这种情况下可以做些什么来避免它?有没有更好的选择?

3个回答

跨框架脚本允许攻击者将您的网站嵌入到他们自己的网站中,作为框架/iframe,然后监视您网站的用户。

这需要一些社会工程学。攻击者会欺骗某人访问他们的网页,其中包含(例如)您网站的登录信息。父网站还需要一些恶意 Javascript 来读取击键以捕获登录。理论上,浏览器有一个同源策略,应该可以防止攻击者这样做,但实际上这种攻击是可能的,通常是由于浏览器错误

防御:

  1. 根据 W3 规范,您应该frame-ancestors在 HTTP 响应中包含 Content Security Policy 标头,以防止您的网站被加载到框架中。一些较旧的浏览器可能不支持此标头,因此还要使用值为 DENY、SAMEORIGIN 或 ALLOW-FROM uri 的 X-Frame-Options 标头。在某些浏览器中,X-Frame-Options 优先于 CSP 框架祖先。

  2. 您还可以添加一些 Javascript“框架破坏”代码,以防止您的网站在旧浏览器中被“框架”。

这些解决方案和更多细节在这个OWASP 备忘单上进行了讨论。

这个这个最好的地方获得有关问题的更多信息

@*Prevent Cross-Frame Scripting attacks*@
<script>
    (function (window) {
        if (window.location !== window.top.location)
            window.top.location = window.location;
    })(this);
</script>

我在找到这个链接的地方找不到相关问题,但这里有一篇关于FrameBusting以及你应该如何实现它的论文。

由斯坦福大学的 Gustav Rydstedt、Elie Bursztein 和 Dan Boneh 与卡内基梅隆大学的 Collin Jackson 合作撰写

这是论文建议:

<style>
    body {display: none; }
</style>
<script>
    if (self === top) {
        document.getElementsByTagName("body")[0].style.display = 'block';
    } else {
        top.location = self.location
    }
</script>

请注意display: none,这非常重要,因为攻击者可以在您的部分页面上禁用 javascript。有关更多信息,请参阅论文。