nginx+tomcat服务器配置(秒杀安全扫描)

原创 2018年04月17日 10:34:13
nginx配置修改

1.解决配置limit_conn_zone来限制并发连接数
      在http处添加
      limit_conn_zone $binary_remote_addr zone=perip:10m;
      limit_conn_zone $server_name zone=perserver:10m;
2.解决 Slow HTTP POST vulnerability(150079 Slow HTTP headers vulnerability
150085 Slow HTTP POST vulnerability)
 (1)在server处添加
if ($request_method = PUT ) {
                 return 403;
          }
 if ($request_method = DELETE ) {
             return 403;
          }
client_body_timeout 10s;
client_header_timeout 10s;
large_client_header_buffers 4 8k;
client_header_buffer_size 1k;
limit_conn perip 5;
limit_conn perserver 20;
(2)在具体的context(location)添加
proxy_connect_timeout 6s;
proxy_send_timeout 6s;
proxy_read_timeout 6s;
proxy_buffer_size 4k;
proxy_buffers 32 4k;
proxy_busy_buffers_size 64k;
client_max_body_size    10m;
client_body_buffer_size 128k;
3.解决HttpOnly问题(150123 Cookie Does Not Contain The "HTTPOnly" Attribute (1))
在具体的location里添加
add_header Set-Cookie "HttpOnly=true;Secure=true";
1.修改tomcat\conf\context.xml
在<Context>
里添加
 <Context  useHttpOnly="true" >
2.在tomcat\conf\web.xml
在<session-config>
     <session-timeout>30</session-timeout>
</session-config>
里添加
<session-config>
     <session-timeout>30</session-timeout>
    <cookie-config>
             <http-only>true</http-only>
    </cookie-config>
</session-config>

4.解决Clickjacking - x框选项头没有设置(150081 Clickjacking - X-Frame-Options header is not set)
在具体的location里添加
add_header X-Frame-Options SAMEORIGIN;
5.解决会话Cookie不包含“安全”属性(150122 Cookie Does Not Contain The "secure" Attribute)
在tomcat\webapps\程序包\WEB-INF\web.xml添加(com.*.*.XssFilter.XssFilter为根据实际项目编写)
<filter>   
        <filter-name>XssFilter</filter-name>   
        <filter-class>com.*.*.XssFilter.XssFilter</filter-class>               
    </filter>   
    <filter-mapping>   
        <filter-name>XssFilter</filter-name>   
        <url-pattern>/*</url-pattern>   
    </filter-mapping>
6.解决页面提示400导致配置信息外泄的危险(150022 Verbose Error Message)
在tomcat\webapps\程序包\WEB-INF\web.xml添加
<!-- 配置错误页面 -->
 <error-page>
  <error-code>400</error-code>
  <location>/error/404.jsp</location>
 </error-page>
 
 <error-page>
  <error-code>404</error-code>
  <location>/error/404.jsp</location>
 </error-page>
 <error-page>
  <error-code>500</error-code>
  <location>/error/500.jsp</location>
 </error-page>
 <welcome-file-list>
  <welcome-file>index.html</welcome-file>
 </welcome-file-list>
在程序包的tomcat\webapps\context\添加error包

附xss代码:

 
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
public class XssFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;   
        String sessionid = req.getSession().getId();
        resp.setHeader("Set-Cookie", "JSESSIONID=" + sessionid + "; path=/; HttpOnly; secure");    
        XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request);
        filterChain.doFilter(xssRequest, response);
    }
    @Override
    public void destroy() {}
    @Override
    public void init(FilterConfig arg0) throws ServletException {}
}
 
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
 public XssHttpServletRequestWrapper(HttpServletRequest request) {
   super(request);
 }
 @Override
    public String[] getParameterValues(String parameter) {
        String[] values = super.getParameterValues(parameter);
        if (values == null) {
            return null;
        }
        int count = values.length;
        String[] encodedValues = new String[count];
        for (int i = 0; i < count; i++) {
            encodedValues[i] = stripXSS(values[i]);
        }
        return encodedValues;
    }
    @Override
    public String getParameter(String parameter) {
//     if("jsessionid".equals(parameter)){
//      System.out.println(111);
//     }
        String value = super.getParameter(xssEncode(parameter));
        value=stripXSS(value);
        if (value != null) {
   value = xssEncode(value);
  }
  return value;
    }
    @Override
    public String getHeader(String name) {
        String value = super.getHeader(xssEncode(name));
        value=stripXSS(value);
        if (value != null) {
   value = xssEncode(value);
  }
  return value;
    }
    private String stripXSS(String value) {
        if (value != null) {
            // NOTE: It's highly recommended to use the ESAPI library and uncomment the following line to
            // avoid encoded attacks.
            // value = ESAPI.encoder().canonicalize(value);
            // Avoid null characters
            value = value.replaceAll("", "");
            // Avoid anything between script tags
            Pattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            // Avoid anything in a src='...' type of expression
            scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            // Remove any lonesome </script> tag
            scriptPattern = Pattern.compile("</script>", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            // Remove any lonesome <script ...> tag
            scriptPattern = Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            // Avoid eval(...) expressions
            scriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            // Avoid expression(...) expressions
            scriptPattern = Pattern.compile("expression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            // Avoid javascript:... expressions
            scriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            // Avoid vbscript:... expressions
            scriptPattern = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            // Avoid onload= expressions
            scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
        }
        return value;
    }
    /**
 * 将容易引起xss漏洞的半角字符直接替换成全角字符
 *
 * @param s
 * @return
 */
 private static String xssEncode(String s) {
  if (s == null || "".equals(s)) {
   return s;
  }
  StringBuilder sb = new StringBuilder(s.length() + 16);
  for (int i = 0; i < s.length(); i++) {
   char c = s.charAt(i);
   switch (c) {
   case '>':
    sb.append('>');//全角大于号
    break;
   case '<':
    sb.append('<');//全角小于号
    break;
   case '\'':
    sb.append('‘');//全角单引号
    break;
   case '\"':
    sb.append('“');//全角双引号
    break;
   case '&':
    sb.append('&');//全角
    break;
   case '\\':
    sb.append('\');//全角斜线
    break;
   case '#':
    sb.append('#');//全角井号
    break;
   default:
    sb.append(c);
    break;
   }
  }
  return sb.toString();
 }
}

Nginx服务器配置

Nginx是由Igor Sysoev为俄罗斯的Rambler.ru站点开发的一个高性能的HTTP和反向代理服务器,也是现在中国互联网公司使用最多的代理软件,利用Nginx与各个模块的整合可以实现高效的WEB处理能力。官方QQ群:612148723。
  • 2017年01月01日 20:16

秒杀性能优化实践总结

秒杀优化实践总结。
  • ClementAD
  • ClementAD
  • 2016-04-18 20:02:20
  • 1604

秒杀系统架构方案

如今各大电商网站,淘宝,京东,苏宁秒杀活动随处可见,要设计一个安全,稳定的秒杀系统,首先需要了解秒杀的业务特性和秒杀业务流程         标准的电商购物流程,如下图所示    ...
  • Y0800508014677
  • Y0800508014677
  • 2017-03-16 00:15:16
  • 533

Windows WEB服务器配置安全规范

  • 2010年05月27日 15:15
  • 66KB
  • 下载

自己的redis秒杀[生成订单入库]

使用redis队列实现秒杀功能,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行。...
  • nw_ningwang
  • nw_ningwang
  • 2017-09-08 17:48:02
  • 197

12种开源Web安全扫描程序

开源Web安全扫描程序来查找漏洞 赛门铁克的一个有趣的报告显示,76%的被扫描网站有恶意软件 如果您使用的是WordPress,那么SUCURI的另一份报告显示,超过70%的被扫描网站被感染了一个或...
  • wh211212
  • wh211212
  • 2017-11-24 09:38:27
  • 914

Android安全扫描检查

【背景介绍】百度将于近期推出技术类图书《如何高效地开发一款高质量的移动APP》(名称待定),这将是百度首次技术输出,选题聚焦在移动互联网领域,内容覆盖APP开发、部署、测试、分发、变现、监控和数据分析...
  • lengqi0101
  • lengqi0101
  • 2016-06-28 11:00:21
  • 1288

秒杀 设计流程

秒杀是最考验程序员的一个功能,如果不能很好的做好秒杀。那个结果只能呵呵 了!   秒杀剖析:        技术角度:高可用、高并发         市场角度:用户体验、曝光度、促销...
  • woshihaiyong168
  • woshihaiyong168
  • 2017-02-22 20:00:03
  • 647

想做一个整合开源安全代码扫描工具的代码安全分析平台

想做一个整合开源安全代码扫描工具的代码安全分析平台,最近看的主要是PHP方向的工具: RIPShttp://rips-scanner.sourceforge.net/需要研究如何获取结果并转换,因为R...
  • Testing_is_believing
  • Testing_is_believing
  • 2014-03-16 10:22:44
  • 6738

源代码安全扫描及服务技术方案

  • 2014年04月21日 15:02
  • 2.09MB
  • 下载
收藏助手
不良信息举报
您举报文章:nginx+tomcat服务器配置(秒杀安全扫描)
举报原因:
原因补充:

(最多只允许输入30个字)