`

简单web安全框架

 
阅读更多

 

web安全框架,主要用servlet filter方式覆盖httpServletRequest和HttpServletResponse方式增加一些输入输出的过滤,github地址:https://github.com/zhwj184/webSecurity

主要实现的安全包括:

  1. XSS过滤(获取用户输入参数和参数值进行XSS过滤,对Header和cookie value值进行XSS过滤(转码Script标签的< > 符号),

  2. 对Response的setStatus(int sc, String sm)方法 sm错误信息进行XSS过滤;

  3. 对Header的CLRF进行过滤;

  4. 对cookie大小和cookie的白名单进行验证;

  5. 对文件上传后缀白名单进行验证;

  6. 对只允许POST提交的url进行验证;

  7. CSRF攻击 tokenID防御支持;

  8. SESSION通过加密存储到cookie支持;

  9. 静态资源路径去除../上级目录符号;

使用指南:只需要在web.xml中配置对应的filter即可。

HttpSessionCookitStoreFilter是session存储到cookie的支持,encryKey加密密钥;

DefaultBaseSecurityFilter是默认的安全过滤filter,

securityFilterList可以配置对应的filter;

CookieWhiteListFilter:cookie白名单配置,如果配置这个,则需要配置参数cookieWhiteList;

CsrfTokenCkeckFilter:对post表单提交进行csrf token验证;使用CsrfTokenIdCreator生成csrf tokenid后放入表单还有session中,key名称必须为csrf_开头;为了支持多个form表单;

FileUploadSecurityFilter:文件上传后缀白名单验证,需要配置whitefilePostFixList参数;

FormPostPermitCheckFilter;只允许post提交的url列表,需要配置onlyPostUrlList参数;

redirectWhiteList:是配置重定向白名单url参数;

StaticFilePathSecurityFilter:url的../上级路径过滤;

 

使用在

<filter>
    <filter-name>HttpSessionCookitStoreFilter</filter-name>
    <filter-class>org.websecurity.filter.HttpSessionCookitStoreFilter</filter-class>
    <init-param>    
        <param-name>encryKey</param-name>
        <param-value>1234567887654321</param-value>
    </init-param>
</filter>

<filter>
    <filter-name>DefaultBaseSecurityFilter</filter-name>
    <filter-class>org.websecurity.DefaultBaseSecurityFilter</filter-class>
    <init-param>
        <param-name>securityFilterList</param-name><!-- ,org.websecurity.filter.CsrfTokenCkeckFilter -->
        <param-value>org.websecurity.filter.CookieWhiteListFilter,org.websecurity.filter.FormPostPermitCheckFilter</param-value>
    </init-param>
    <init-param>
        <param-name>cookieWhiteList</param-name>
        <param-value>id,JESSIONID,name,clrf</param-value>
    </init-param>
    <init-param>
        <param-name>onlyPostUrlList</param-name>
        <param-value>/d/sssecurity, /user/aaa/name*</param-value><!-- 支持正则匹配 -->
    </init-param>
    <init-param>
        <param-name>whitefilePostFixList</param-name>
        <param-value>jpg,png,doc,xls</param-value>
    </init-param>
    <init-param>
        <param-name>encryKey</param-name>
        <param-value>1234567887654321</param-value>
    </init-param>
    <init-param>
        <param-name>redirectWhiteList</param-name>
        <param-value>http://localhost:8080/[0-9A-Za-z]*,http://www.taobao.com/[0-9A-Za-z]*</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>HttpSessionCookitStoreFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>DefaultBaseSecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

测试代码:

@WebServlet(urlPatterns={"/security"},initParams={@WebInitParam(name="f", value="valuef"),@WebInitParam(name="g", value="valueg")})
public class MySecurityTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MySecurityTest() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//xss params filter
		//url:
		System.out.println(request.getParameter("xssparam")); //output:
		System.out.println(request.getParameterMap().toString());
		
		//cookie white list output filter
		System.out.println(request.getCookies().toString());
		response.addCookie(new Cookie("name", "valName"));//valid
		response.addCookie(new Cookie("clrf", "valName\r\n<script>"));//valid
		try{
			response.addCookie(new Cookie("invalidName", "invalidvalName"));//not valid, throw runtimeexception
		}catch(Exception e){
			e.printStackTrace();
		}
		
		//cookie maxsize filter
		response.addCookie(new Cookie("id", ByteBuffer.allocate(4 * 1024 + 2).toString()));//valid
		
		//head security filter
		response.setHeader("aaa\r\nbbb", "ccc\r\\ddd\n");
		
		//session store to cookie
		System.out.println(request.getSession().getAttribute("sescookie"));
		request.getSession().setAttribute("sescookie", "sessioncookiestoretest");
		
		//rediction filter
//		response.sendRedirect("http://www.163.com");//failed
		
		//status filter
		response.setStatus(404, "<script>alert(1)</script>");
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().write("hello, world");
	}

}

 

 一些输出:

&lt;script&gt;alert(1)&lt;/script&gt;
{xssparam=[Ljava.lang.String;@3476a7}
[Ljavax.servlet.http.Cookie;@1f5865a
java.lang.RuntimeException: cookie:invalidName is not in whitelist,not valid.
	at org.websecurity.SecurityHttpServletResponse.addCookie(SecurityHttpServletResponse.java:34)
	at org.websecurity.test.MySecurityTest.doGet(MySecurityTest.java:44)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.filter.My3Filter2.doFilter(My3Filter2.java:28)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.filter.My3Filter.doFilter(My3Filter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.websecurity.DefaultBaseSecurityFilter.doFilter(DefaultBaseSecurityFilter.java:44)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)

 

 

 

  • 大小: 17.4 KB
  • 大小: 91.1 KB
1
0
分享到:
评论

相关推荐

    Python-Django是一个开放源代码的Web应用框架

    总的来说,Django作为Python开发中的Web开发框架,以其高效、安全和易用性,为开发者提供了强大的工具,帮助他们构建复杂且功能丰富的Web应用。无论是初学者还是经验丰富的开发者,都能在Django的世界里找到适合自己...

    架构探险 从零开始写Java Web框架.pdf

    本书首先从一个简单的Web应用开始,让读者学会...最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展Web服务插件与安全控制插件为例,教会读者如何设计款可扩展的Web应用框架。

    Django是一个开放源代码的Web应用框架

    Django,作为一款由Python语言编写的开源Web应用框架,为开发者提供了强大的工具和功能,以便构建高效、安全且易于维护的网站。它的核心设计理念是“简洁、实用、优雅”,这使得Django在Web开发领域备受青睐。接下来...

    web2py框架代码

    Web2py是一个强大的Python Web应用框架,...综上所述,Web2py框架以其全面的功能、易用性和安全性吸引了众多Python Web开发者。下载这个压缩包并解压后,你可以立即开始体验Web2py的强大功能,构建属于自己的Web应用。

    Iframe -web简单的WEB框架(Iframe)

    **Iframe - Web简单的WEB框架(Iframe)** 在Web开发中,`&lt;iframe&gt;`(Inline Frame)元素是一个非常实用的工具,它允许我们在一个HTML文档中嵌入另一个HTML文档,从而实现页面的分片或者内容的动态加载。`&lt;iframe&gt;`...

    Java安全框架Shiro在Web中的研究与应用_翁云翔.caj

    安全框架 Shiro ,了解到 Shiro 是一个简单易 用且功能强大的安全框架,可以与很多第三方框架良好地耦合,并且可以在任何应 用环境中使用。接着通过介绍 Shiro 的四个基本功能:认证、授权、会话管理、加 密的...

    Web开发框架

    【Web开发框架】是软件开发领域中的一个重要概念,它为构建Web应用程序提供了结构化和可重用的组件,使得开发者可以更加高效地进行工作。在众多的Web开发框架中,PHP Web框架以其开源、易学、高效的特点备受青睐。...

    技术文档web框架

    2. Flask:Flask是一款轻量级的Python Web框架,其核心简单,易于上手,但可以通过扩展插件支持复杂应用。Flask不包含ORM,但可以与SQLAlchemy等库集成。 3. Spring Boot:Spring Boot是Java领域的一款热门Web框架...

    django 学习笔记(1)—— python和web开发框架(csdn)————程序.pdf

    Django作为Python的一个流行Web框架,是基于MTV(Model-Template-View)模式设计的,旨在快速、安全且实用地开发Web应用。 1. Web开发基本知识 Web应用的核心是HTTP(超文本传输协议),它是互联网上应用最广泛的...

    Java Web SSH框架搭建小案例

    这个"Java Web SSH框架搭建小案例"旨在通过一个简单的登录退出功能来演示如何集成和使用这些框架。下面我们将详细讲解SSH框架的核心概念以及如何进行项目搭建。 1. **Spring框架**:Spring是Java领域的一个全功能的...

    简单好用的Web后台管理框架

    "简单好用的Web后台管理框架"是一个专为提高开发效率而设计的解决方案,它包含了导航菜单、增删改查页面以及登录页面等功能,为开发者提供了完整的后台管理模板。 首先,我们来了解一下后台管理框架的基本概念。...

    Web服务框架 Apache Axis

    6. **安全性**:Axis框架支持安全特性,如WS-Security(Web Services Security)和其他安全标准,确保Web服务的数据传输安全。 在实际应用中,Apache Axis通常与Tomcat或Jetty等Servlet容器配合使用,部署Web服务。...

    架构探险 从零开始写javaweb框架.pdf

    本书首先从一个简单的 Web 应用开始,让读者...*后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为例,教会读者如何设计一款可扩展的Web应用框架。

    公司写的1个简单的WEB框架.doc

    【标题】:“公司写的1个简单的WEB框架.doc” 【描述】:这是一份关于一个公司内部使用的简单WEB框架的文档,该框架已经在多个内部系统中实施,并寻求外部的意见和建议。 【标签】:“web框架” 【部分内容】:...

    架构探险——从零开始写Java Web框架 绝对完整!强烈推荐

    《架构探险——从零开始写Java Web框架》...最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为例,教会读者如何设计一款可扩展的Web应用框架。 [1]

    Linux 通用 WebAdmin (webui) 开发框架-C语言 源码

    提供了一个结构化的WebAdmin开发框架,它的前后台部分均采用插件式的程序开发方法,借助提供的插件开发模板,WebAdmin系统开发者不必关WebAdmin开发框架的具体实现,就可设计出界面统一、操作简单、安全稳定的WebGUI...

    jsecurity java 安全框架

    Java安全框架JSecurity,也被称为Apache Shiro,是一款强大的、易于使用的Java安全框架,它提供了身份验证、授权、会话管理和加密等核心安全功能。在J2EE环境中,JSecurity可以很好地集成到应用中,为开发者提供了一...

    DWR js框架 javascript框架 web与java交互 Direct Web Remoting Ajax开源框架

    综上所述,DWR作为一个强大的JavaScript框架,极大地简化了Web开发者在Java和JavaScript之间的交互,提供了一种高效、安全的方法来实现Ajax功能。通过理解并熟练使用DWR,开发者可以构建出更加动态和用户友好的Web...

    Django:一个可以使Web开发工作愉快并且高效的Web开发框架

    Django还提供了缓存框架,用于优化性能,以及内置的CSRF(跨站请求伪造)保护,确保应用的安全性。另外,Django的Admin接口是一个自动化的后台管理系统,可以快速创建和管理应用的数据。 本书的目标是帮助读者成为...

Global site tag (gtag.js) - Google Analytics