Java Web:主动和被动方式检测安全的框架

简介: 对于某些敏感的系统例如支付、交易需要为其加固,有必要将可能的攻击情况考虑进来加以防范,于是有了这么一个简易的安全框架。在前辈的代码上( 详见 :http://blog.csdn.net/zhongweijian/article/details/8680737)我大幅度重构,更好地理解 Java Web 安全实施措施。

对于某些敏感的系统例如支付、交易需要为其加固,有必要将可能的攻击情况考虑进来加以防范,于是有了这么一个简易的安全框架。在前辈的代码上( 详见 :http://blog.csdn.net/zhongweijian/article/details/8680737)我大幅度重构,更好地理解 Java Web 安全实施措施。

源代码在:http://git.oschina.net/sp42/ajaxjs/tree/master/ajaxjs-security?dir=1&filepath=ajaxjs-security

该框架基于 Sevlet 过滤器和若干 HttpServletRequest/HttpServletResponse 覆盖的方式增加一些输入输出的过滤。如下表格显示了可支持的哪些攻击。

作用 对应类名 加载方式 init-param
XSS过滤 com.ajaxjs.web.security.wrapper.XSS_Request/XSS_Response wrapper enableXSSFilter
Header CLRF 过滤 com.ajaxjs.web.security.wrapper.CLRF_Response wrapper enableCLRF_Filter
Cookies Key 验证和大小验证 com.ajaxjs.web.security.wrapper.CookieRequest/CookieResponse wrapper cookieWhiteList(配置白名单)
文件上传后缀验证 com.ajaxjs.web.security.wrapper.UploadRequest wrapper uploadfileWhiteList(配置白名单)
CSRF 攻击 com.ajaxjs.web.security.filter.CSRF filter encryCookieKey(配置 key)
Session 通过加密存储到 cookie com.ajaxjs.web.security.filter.EncrySessionInCookie filter encryCookieKey(配置 key)
POST 白名单/黑名单机制验证 com.ajaxjs.web.security.filter.Post filter postWhiteList/postBlackList(配置白名单/黑名单)
Referer 来路检测 com.ajaxjs.web.security.filter.RefererFilter filter RefererFilter(配置 key)

所有检测都由 ConfigLoader 负责读取配置和启动。是否启动某项功能取决于配置有否,只要有配了的话,该功能点就生效,反之则不启用。如表格上的 init-param 对应的是 web.xml 里面配置的内容。

加载方式指的是在 filter 中主动检测,一般是执行 check() 方法,传入 request/response 即可;而 wrapper 是指被动方式检测、过滤,具体说是对 Java API 方式覆盖来包含检测手段,类似于设计模式的 Template 模版方法,使得调用者在不改变 API 的前提下又能加入新的逻辑。特别地可以了解下 HttpServletRequestWrapper/HttpServletResponseWrapper 这两个原生 API。

使用方法:引入 jar 包并添加 web.xml 配置。

<!-- 防御 -->
<filter>
	<filter-name>SecurityFilter</filter-name>
	<filter-class>com.ajaxjs.web.security.ConfigLoader</filter-class>
	
	<!-- 是否启动 XSS 过滤 -->
	<init-param>
		<param-name>enableXSSFilter</param-name>
		<param-value>true</param-value>
	</init-param>
	
	<!-- 是否启动 CLRF 过滤 -->
	<init-param>
		<param-name>enableCLRF_Filter</param-name>
		<param-value>true</param-value>
	</init-param>
	
	<!-- Session 通过加密存储到 cookie -->
	<init-param>
		<param-name>encryCookieKey</param-name>
		<param-value>1234567887654321</param-value>
	</init-param>
	
	<!-- Cookies 白名单机制验证和大小验证 -->
	<init-param>
		<param-name>cookieWhiteList</param-name>
		<param-value>id,JESSIONID,name,clrf</param-value>
	</init-param>
	
	<!-- 文件上传后缀白名单 过滤 -->
	<init-param>
		<param-name>uploadfileWhiteList</param-name>
		<param-value>jpg,png,doc,xls</param-value>
	</init-param>

	<!-- CSRF 攻击 过滤 -->
	<init-param>
		<param-name>CSRF_Filter</param-name>
		<param-value>true</param-value>
	</init-param>

	<!-- POST 白名单/黑名单机制验证(支持正则匹配) -->
	<init-param>
		<param-name>postWhiteList</param-name>
		<param-value>/d/sssecurity, /user/aaa/name*</param-value>
	</init-param>
	<init-param>
		<param-name>postBlackList</param-name>
		<param-value>true</param-value>
	</init-param>
	
	<!-- 配置 Security 异常发生后跳转 url 参数 -->
	<init-param>
		<param-name>redirectUrlt</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>SecurityFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- // -->

具体防御原理可参见我之前写的博客《 网络信息系统安全检测方案设计()》。

值得注意的是本方案没有考虑 SQL 注入,这是因为 SQL 注入在 DAO 层面已经完成了。

目录
相关文章
|
22天前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
52 9
|
3月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
143 62
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
89 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
3月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
65 2
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
57 2
|
3月前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
190 1
|
3月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
65 6
|
3月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
77 6
|
3月前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
66 4
|
3月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
103 4