我的Nginx服务器将X-Frame标头设置为DENY,这是迄今为止的好处。但现在我只需要允许我网站的一个页面嵌入到我的域外的iframe中。
我尝试在服务于网页的控制器内使用php在应用程序级别解决此问题:
header('X-Frame-Options: ALLOW-FROM 127.0.0.1');
但是当我尝试将网页嵌入外部iframe时的响应是:
X-Frame-Options:ALLOW-FROM 127.0.0.1
X-Frame-Options:DENY
那么连接选项(nginx配置的一组与应用程序代码中的一组)?那么,我如何允许我的服务器的单个页面嵌入外部iframe?
答案 0 :(得分:0)
为什么不写一个简单的if else语句?如果PHP检测到某个页面(URL),则允许嵌入到iFrame中,否则不允许嵌入到iFrame中。
答案 1 :(得分:0)
在Django的情况下,我们像这样解决了它
location /the/page/you/want/to/expose/ {
add_header Access-Control-Allow-Origin *;
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/app/appsco/socket;
}
location / {
add_header X-Frame-Options DENY; #This is your catch all.
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/app/appsco/socket;
}
请记住将add_header移除到整个服务器。把它放在你的全部。对于Django用户@frame_deny_exempt
,请查看http://django-secure.readthedocs.org/en/latest/middleware.html
答案 2 :(得分:0)
我认为您需要删除X-Frame-Options:DENY
,明确说明允许似乎在默认情况下阻止其他所有内容。我只用URL而不是IP地址测试了这个,但https://example.com的x帧被阻止了,而test.mysite-b.com可以嵌入test.mysite-b.com和虚拟主机同样的配置mysite-b.com也被阻止嵌入test.mysite-b.com。
add_header X-Frame-Options "ALLOW-FROM http://test.mysite-b.com";
这允许test.mysite-b.com使用此配置嵌入任何站点,包括其自身。其他网站仍然被拒绝,无法嵌入test.mysite-b.com或其他网址。
作为参考,这是我的整个SSL配置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP$
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 37.235.1.174 37.235.1.177 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload' always;
add_header X-Frame-Options "ALLOW-FROM http://test.mysite-b.com";
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
一个潜在的问题我可以认为您的允许网址列表是可访问的,因此如果您希望它们因某些原因而被隐藏......它们将不会被隐藏。
Load denied by X-Frame-Options: https://test.mysite-b.com/ does not permit framing by https://mysite-b.com/iframe.html.