`

nginx 自定义 header

 
阅读更多
$http_HEADER
The value of the HTTP request header HEADER when converted to lowercase and with 'dashes' converted to 'underscores', e.g. $http_user_agent, $http_referer...;


地址:http://wiki.nginx.org/HttpCoreModule#.24sent_http_HEADER


原文地址:http://blog.csdn.net/rubenyu/article/details/6721910







上周末收到安全组童鞋的邮件,说是输出的时候有安全缺陷. 表现是在IE8之下,如果内容中有脚本的话,就会被直接执行掉,那么如果有攻击代码,这就杯具了…. 之所以会在IE8之下出现这个问题,是因为IE8似乎支持个什么mhtml.可以直接解读一些base64之后的内容,同时还能解读邮件头,导致邮件头不能被显示.

查了下google的实现,是加入了如下的三个header:

X-Content-Type-Options nosniff;

X-XSS-Protection “1; mode=block”;

X-Frame-Options SAMEORIGIN;

于是我就想加到我们的webpy中去….刷新,没反应,再刷新,还是没反应….

没刷几下,hoho,下班喽…

早上来了之后,开始追flup的源码,发现flup中的response都是正常的.

对了,这里还有两个tips需要记下来备忘:

1. 在我们的包里面flup是个egg,想玩,肯定得将它解开,于是unzip一下egg,可以得到一个可以debug的文件夹.这时候最好删除egg,我没测试这时候到底是谁生效.

2. 我们的组合是webpy+flup,使用的是flup的WSGIServer,读了部分WSGIServer的源码之后,里面有debug开关.打开的方法是:

from flup.server import fcgi_base

fcgi_base.DEBUG = 9

然后,在那个打开的包里面就可以用 _debug([0-9], msg) 这样的格式输出了.

默认情况下,log放在/tmp/fcgi.log中. 我放的DEBUG是9,貌似是里面最大的数字了,当然,越大信息越详细啦.

言归正传,我追阿追阿追,就是查不到原因,问了master dy,大师让我干脆给nginx.conf加配置,于是出现了这段:

[python] view plaincopyprint?
location ~ /downloads/ { 
            add_header XContent-Type-Options nosniff; 
            add_header X-XSS-Protection "1; mode=block"; 
            add_header X-Frame-Options SAMEORIGIN; 
            root blablabla; 
            internal; 
        } 
这样是可以解决问题了.

但是为啥nginx就不肯输出呢?于是追阿追阿追 发现在nginx源码中有这么一个filter(src/http/ngx_http_header_filter_module.c):

存在一个:ngx_http_header_filter方法,里面是重新构造的header从441行开始,一点一点的加…. 到了576行,似乎是要加入用户自定义的header了.但是,通过debug,再次发现思路不对.

最终的解决方案还是add_header(感谢宋老师陪我查了一上午).

我猜这个杯具的原因应该是因为nginx想让输出更加标准和安全些,最安全的方法就是”白名单”…

分享到:
评论

相关推荐

    nginx-indexer:自定义Nginx索引器

    add_before_body /.nginx/header.html; add_after_body /.nginx/footer.html; autoindex_exact_size off; autoindex on;} #indexer将.nginx文件夹复制到您的/home/web目录中。 演示: : 前后附加图标欢迎您为问题...

    基于Nginx和Docker的测试环境bara.zip

    bara概览bara架构很简单,一个Nginx服务器运行在host上,画图如下:其背后用到的主要原理就是Nginx的proxy_pass以及map功能,Nginx会根据浏览器设置的自定义header(v)的值,根据map的映射关系,找到合适的upstream...

    nginx-add-custom-header:nginx使用lua扩展添加一个自定义的头

    添加一个自定义的header--x-mls-logid,用来追踪接口之间的调用流程。 测试环境 MacOSX 10.10.3 8GB i5 openresty 1.7.2.1 PHP 5.4.38 测试结果 使用wrk进行测试 未启用php 不加载扩展 加载扩展 启用php 不加载扩展 ...

    nginx 隐藏版本号与WEB服务器信息的解决方法

    nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看看最终的隐藏结果吧 具体怎么实现呢,其实也很简单,请往下看 1 官网下载最新稳定版 wget http://nginx.org/download/nginx-1.14.1.tar.gz 2 解压 tar...

    Nginx 操作响应头信息的实现

    意思为将自定义的头信息的添加到响应头,指令为 add_header name value [always];,可以用在 http {}, server {}, location {}, if in location {} 上下文中, 只有当响应状态码等于 200, 201 (1.3.10), 204, 206, ...

    AiYooooo#hexo-blog#Nginx配置跨域信息1

    今天在搭建Vue项目时用到了Axios,在添加自定义头信息的时候遇到了问题,options验证阶段报错'Request header field Content

    PHP getallheaders无法获取自定义头(headers)的问题

    一开始通过getallheaders参数获取,但是发现在nginx部署的服务器上获取不到,非常奇怪,查看php手册发现getallheaders这个函数只支持apache服务器。于是找到兼容的方法: if (!function_exists('getallheaders')) {...

    解决nginx/apache静态资源跨域访问问题详解

    1. apache静态资源跨域访问 ...目的是开启apache头信息自定义模块 在独立主机配置文件中新增header Header set Access-Control-Allow-Origin * 例如: ServerAdmin admin@example.com Documen

    Too Naughty网址导航主题-PHP

    外观-主题-自定义-菜单-创建新菜单-菜单位置你自己看着办-然后继续(继续后会有报错不用鸟他)3.网址分类目录-然后点击一下-发布就行了。更新日志:V2.04071.更新申请收录提交失败的问题2.更新APP添加相册不适应的...

    KODExplorer 芒果云-资源管理器

    - 全平台兼容性:Win Linux Mac (Apache、Nginx、IIS) #### 2.使用场景: - 取代FTP,服务端、客户端软件等复杂的安装配置。kod可以一键安装随处使用. - 你可以用它来管理你的服务器(备份,在线解压缩,版本发布......

Global site tag (gtag.js) - Google Analytics