最近服务器环境遇到一系列的麻烦,原因是因为Nginx反代Tomcat时,没有屏蔽PUT/DELTE/OPTION等HTTP不安全方法引起的。在前端没有增加WAF来保护的情况下,需要通过设置来屏蔽这些方法。

由于一般JAVAEE程序都会使用spring等等的框架,会造成实际上虽然tomcat屏蔽了方法,但是还有返回。经查看源码,可以自定义个过滤器,来实现对他不响应。简单的方法,就是在nginx设置不响应,Tomcat也设置不响应,来达到目的。

Nginx在/etc/nginx/nginx.conf中进行如下设置,只开放GET HEAD POST方法:

location / {
   if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 403;
    }

    root html;
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header           Host $host;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size  100m;
    index index.html index.htm index.do index.jsp home/index.do;
}

Tomcat,如果设置全局拒绝,修改conf/web.xml,如果是针对单个应用拒绝,修改应用下的web.xml,在根节点增加以下部分

<security-constraint>
     <web-resource-collection>
         <url-pattern>/*</url-pattern>
         <http-method>PUT</http-method>
         <http-method>DELETE</http-method>
         <http-method>HEAD</http-method>
         <http-method>OPTIONS</http-method>
         <http-method>TRACE</http-method>
     </web-resource-collection>
     <auth-constraint>
     </auth-constraint>
</security-constraint>
<login-config>
     <auth-method>BASIC</auth-method>
</login-config>

以上的TOMCAT设置,实际上会屏蔽这些不安全方法。但是有的测试工具会还检测到开放了HTTP不安全方法,尽量采用nginx来反代tomcat。

发表评论

电子邮件地址不会被公开。 必填项已用*标注