我要求通过限制框架的允许URI来保护网站。还有其他人发布在同一主题上,例如Content-Security-Policy (CSP) workaround for internet explorer(并包含Microsoft建议的方法,可以在https://blogs.msdn.microsoft.com/ieinternals/2010/03/30/combating-clickjacking-with-x-frame-options/找到)。
我需要将X-Frame-Options
用于旧版浏览器和Internet Explorer
。大多数人都知道,X-Frame-Options只接受一个URL。我采用微软的方法来解决这个问题,但我遇到了一个障碍。
框架的网站是ASP.NET供应商应用程序。除了根据需要修改ASPX,JavaScript或配置文件之外,我对它没有多少控制权。这是一个CMS应用程序,因此可能有无数页面。
假设框架网站的网址为vendorapp.example.com
。它嵌入的父网站是parent.example.com
。使用Microsoft的方法将原始URL传递给查询字符串然后设置X-Frame-Options ALLOW FROM,它可以工作。问题是供应商应用程序也使用框架。框架始终是自己的。为了使事情进一步复杂化,有些情况下vendorapp.example.com没有框架,我需要考虑这两种情况,它嵌入在parent.example.com中,何时不是。以下是从parent.example.com的角度看它的样子:
// parent.example.com
// Calls vendor application in frame
<frame src="http://vendorapp.example.com/?param1=1¶m2=2" />
以下是供应商应用程序中的观点:
// vendorapp.example.com
// May or may not have its own inner frame. Points to itself.
<frame = src="http://vendorapp.example.com/articleid=14&otherparam=otherparam" />
从parent.example.com的角度来看,我最多只有一个内框。最糟糕的是,我有两个内框架。
由于这是一个供应商应用程序,我的攻击方法一直是在vendorapp.example.com服务器上使用IIS
URL Rewrite
。我在与parent.example.com对应的查询字符串中传递一个参数。 URL Rewrite读取此参数并在Outbound Rule
中设置X-Frame-Options。 URL Rewrite的一个问题是必须为每个请求设置它。这不像我可以设置一次X-Frame-Options而忘记它。另一个问题是,如果供应商应用程序有自己的框架,我将无法更新框架以添加查询字符串参数。那不是一个选择。我不太确定如何处理这个问题,除了Internet Explorer用户必须在自己的窗口中打开vendorapp.example.com并且无法在框架中查看它。
我不必使用URL Rewrite来解决这个问题。我愿意接受任何解决方案。但请再次理解,这是一个供应商应用程序。我没有选择修改他们编译的代码,这不是我可以与供应商联系并要求他们解决的问题。这是一个“你自己”的问题类型。