代码之家  ›  专栏  ›  技术社区  ›  slee423

使用参数设置iFrame的src会导致X-Frame-Options“SAMEORIGINS”错误

  •  1
  • slee423  · 技术社区  · 8 年前

    我目前正在开发一个网站,使用 angularjs 用于我的客户端并使用 Web API 2 对于我的服务器端。

    首先,我试图嵌入一个 SSRS 使用 iframe 。每当我提供 iframe src具有以下(示例)链接:

    http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?rs:embed=true

    下图是成功加载到网站的报告(快乐时光):

    SSRS report successfully embedded

    其次,每当我使用相同的链接,但这次为其提供参数来填充“Between”和“and”字段时,我会得到以下控制台错误:

    Console Error

    我使用的包含参数的链接如下所示:

    http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?&date1=01/03/2018&date2=04/04/2018?rs:embed=true “”

    最后,当我提供 iframe src一个带参数的链接 X-Frame-Options 'SAMEORIGIN' 错误理想情况下,我想提供 iframe src的参数,否则我将不得不创建多个报告,以实现网站功能。

    我可以在应用程序中执行哪些操作来忽略/删除 X-Frame-Options“SAMEORIGIN” 标题响应?我需要添加一些吗 customHeader 回复到我的 web.config 或者,是否有一种方法可以在启动web应用程序时删除标题?

    2 回复  |  直到 8 年前
        1
  •  5
  •   slee423    8 年前

    因此,在尝试访问以下链接后: http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?&date1=01/03/2018&date2=04/04/2018?rs:embed=true 在我的浏览器URL中,出现以下错误:

    Reporting Services Error

    所以这让我相信我试图传递给 iframe 事实上是不正确的。

    因此,我修改了链接,以遵循以下结构,其中包括我的参数:

    http://EXAMPLE-LINK/reports/report/Test%20Upgrade/Line%20Control?rs:embed=true&date1=01/03/2018&date2=04/04/2018

    正如你所看到的,我通过了 rs:embed=true 参数前的标记 SSRS 报告并成功!我现在可以加载 iframe 使用 SSRS 报告参数已填充。

    Working SSRS Report

        2
  •  0
  •   Nathan Goings    4 年前

    在SQL Report Server 2019中,可以设置自定义 Content-Security-Policy: frame-ancestors <uri> 标题。至少在Chrome中,它会尊重此值 X-Frame-Option 。此外,我还启用了CORS。

    这可以通过SSMS完成。连接到报表服务器实例,右键单击服务器并选择属性。然后转到高级部分。在“用户定义”下,您可以找到 AccessControlAllowOrigin (CORS)和 CustomHeaders 。以下是一些示例值:

    AccessControlAllowOrigin: https://prod_app:8888/, http://dev_app:8888/
    CustomHeaders: <CustomHeaders><Header><Name>Content-Security-Policy</Name><Pattern>.*</Pattern><Value>frame-ancestors https://prod_app:8888 http://prod_dev:8888</Value></Header></CustomHeaders>
    

    这将启用来自 prod_app 使用协议在8888端口上运行 https 并允许来自所有来源的iFrame(不安全)。

    由于一些看似服务器端缓存的问题,我不得不重新启动报表服务器(ReportViewer.aspx有一段时间没有应用自定义标头)。

    最后,如果您破坏了报表服务器属性,并且您的报表服务器无法加载(RSPortal.exe错误等),则可以通过转到SQL数据库直接访问SQL数据库中的报表服务器属性->ReportServer->dbo。ConfigurationInfo表并清除或更新值。您必须重新启动报表服务器windows服务,才能使用此方法使更改生效。