apache上的X-Frame-Options

时间:2013-06-13 16:21:47

标签: apache cross-browser x-frame-options clickjacking

我正在尝试允许某个特定域名通过iframe访问我的网站

Header set X-Frame-Options ALLOW-FROM https://www.that-site.com

我知道这可以通过将上面的行添加到Apache服务器的配置来完成。

这里有两个问题。

1)应该添加哪个配置文件? apache在Unix和windows上运行,如果不是同一个文件

2)在启用all-from时,我仍然希望能够从我自己的域运行一些iframe。我可以在allow-from之后添加以下行吗?

 Header set X-Frame-Options SAMEORIGIN

或者我应该在all-from中添加我自己的域名,即

 Header set X-Frame-Options ALLOW-FROM https://www.that-site.com, http://www.my-own-domain.com

真的需要解决这个问题。提前致谢

5 个答案:

答案 0 :(得分:30)

  1. 您可以添加到.htaccesshttpd.confVirtualHost部分
  2. Header set X-Frame-Options SAMEORIGIN这是最佳选择
  3. 并非所有浏览器都支持

    Allow from URI。参考:X-Frame-Options on MDN

答案 1 :(得分:21)

请参阅X-Frame-Options header on error response

您只需将以下行添加到.htaccess

即可
Header always unset X-Frame-Options

答案 2 :(得分:1)

这适用于所有浏览器:

  1. 使用我的所有javascript
  2. 创建了一个页面
  3. 在同一台服务器上创建第二页,并使用object标签嵌入第一页。
  4. 在我的第三方网站上,我使用Object标签嵌入第二页。
  5. 在public_html文件夹中的原始服务器上创建了一个.htaccess文件,并将Header取消设置为X-Frame-Options。

答案 3 :(得分:1)

我发现如果httpd服务器中的应用程序有一个类似&#34的规则;如果X-Frame-Options标头存在且有值,请不要管它;否则添加标题X-Frame-Options:SAMEORIGIN"那么一个httpd.conf mod_headers规则就像" Header总是取消设置X-Frame-Options"不够。 SAMEORIGIN值始终会到达客户端。

为了解决这个问题,我添加了两个而不是一个mod_headers规则(在最外面的httpd.conf文件中):

Header set X-Frame-Options ALLOW-FROM http://to.be.deleted.com early
Header unset X-Frame-Options

第一条规则告诉任何内部请求处理程序,其他一些代理负责防止点击劫持,它可以跳过它拯救世界的企图。它早在"早期"处理。第二个规则剥离了完全不需要的X-Frame-Options标头。它与#34;晚期"处理

我还添加了适当的Content-Security-Policy标头,以便世界保持受保护,但来自可信站点的多源Javascript仍然可以运行。

答案 4 :(得分:1)

以下是对我的作用:我在http IInputDeviceEnumerator newEnum = (IInputDeviceEnumerator)FormatterServices.GetUninitializedObject(type); if (newEnum is IIMConfigurable typeSettings) { string pluginDirectory = Path.GetDirectoryName(new System.Uri(typeSettings.GetType().Assembly.CodeBase).AbsolutePath); string pluginConfigPath = Path.Combine(pluginDirectory, "settings.json"); if (File.Exists(pluginConfigPath)) { try { JsonConvert.PopulateObject(File.ReadAllText(pluginConfigPath), typeSettings.config); } catch { } } SharedProperties.Settings.pluginSettings.settingsGroups.Add(typeSettings.config); } var constructor = type.GetConstructor(Type.EmptyTypes); constructor.Invoke(newEnum, null); 和https PopulateObjectMembers虚拟主机块中添加了以下指令:

template = '''
<html>
<div>
Hello world
</div>
</html>
'''

这背后的原因?好吧,默认情况下,如果已设置,则服务器不会重置import os from sendgrid import SendGridAPIClient template = ''' <html> <div> Hello world </div> </html> message = { 'personalizations': [ { 'to': [ { 'email': 'test@example.com' } ], 'subject': 'Sending with Twilio SendGrid is Fun' } ], 'from': { 'email': 'test@example.com' }, 'content': [ { 'type': 'text/plain', 'value': template } ] } try: sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY')) response = sg.send(message) print(response.status_code) print(response.body) print(response.headers) except Exception as e: print(str(e)) 头,因此我们首先需要始终删除默认值,在我的情况下为<VirtualHost *:80>,然后使用下一条规则将其设置为理想值,在我的情况下为<VirtualHost *:443>。当然,您也可以使用ServerName your-app.com ServerAlias www.your-app.com Header always unset X-Frame-Options Header set X-Frame-Options "SAMEORIGIN" 规则。