该框架基于 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
enableCLRF_Filter
Cookies Key 验证和大小验证
com.ajaxjs.web.security.wrapper.CookieRequest/CookieResponse
cookieWhiteList(配置白名单)
文件上传后缀验证
com.ajaxjs.web.security.wrapper.UploadRequest
uploadfileWhiteList(配置白名单)
CSRF 攻击
com.ajaxjs.web.security.filter.CSRF
filter
encryCookieKey(配置 key)
Session 通过加密存储到 cookie
com.ajaxjs.web.security.filter.EncrySessionInCookie
POST 白名单/黑名单机制验证
com.ajaxjs.web.security.filter.Post
postWhiteList/postBlackList(配置白名单/黑名单)
Referer 来路检测
com.ajaxjs.web.security.filter.RefererFilter
RefererFilter(配置 key)
所有检测都由 ConfigLoader 负责读取配置和启动。是否启动某项功能取决于配置有否,只要有配了的话,该功能点就生效,反之则不启用。如表格上的 init-param 对应的是 web.xml 里面配置的内容。
加载方式指的是在 filter 中主动检测,一般是执行 check() 方法,传入 request/response 即可;而 wrapper 是指被动方式检测、过滤,具体说是对 Java API 方式覆盖来包含检测手段,类似于设计模式的 Template 模版方法,使得调用者在不改变 API 的前提下又能加入新的逻辑。特别地可以了解下 HttpServletRequestWrapper/HttpServletResponseWrapper 这两个原生 API。
使用方法:引入 jar 包并添加 web.xml 配置。
值得注意的是本方案没有考虑 SQL 注入,这是因为 SQL 注入在 DAO 层面已经完成了。