EasyFilter 使用手册


EasyFilter是一个Jave Web请求内容过滤替换组件,能够对用户请求中的以下信息进行过滤替换:

  1. 特殊字符替换(如:<>特殊标记,脚本等)
  2. 非法关键字替换(如:网络系统中国情不允许的特殊关键词)
  3. SQL防注入过滤(如:%,*,or,delete,and等等SQL特殊关键字)

支持使用properties或xml配置文件自定义过滤配置。

使用步骤

  1. 加入jar包:EasyFilter-X.X.X.jar

    • Maven:
      <dependency>
      <groupId>cn.easyproject</groupId>
      <artifactId>easyfilter</artifactId>
      <version>2.0.1-RELEASE</version>
      </dependency>
  2. web.xml配置过滤器

    如果有其他过滤器,请检查过滤器执行顺序(filter-mapping定义顺序)保证EasyFilter优先过滤数据。例如,有struts2的项目,EasyFilter应该早于Struts2的StrutsPrepareAndExecuteFilter执行。

    <filter>
       <filter-name>contentFilter</filter-name>
       <filter-class>cn.easyproject.easyfilter.filter.EasyFilter</filter-class>
       <!-- request 请求字符集, 默认为 utf-8  -->
       <init-param>
           <param-name>charset</param-name>
           <param-value>utf-8</param-value>
       </init-param>
    </filter>
    
    <filter-mapping>
       <filter-name>contentFilter</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
  3. 自定义配置
    在类路径根目录下创建easyFilter.propertieseasyFilter.xml(如果没有配置,EasyFilter会使用内部默认配置文件easyFilter-failsafe.properties)。配置方式和参数如下:

    • 配置方式一: easyFilter.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <easyFilter xmlns="http://www.easyproject.cn/schema/easyFilter"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.easyproject.cn/schema/easyFilter http://www.easyproject.cn/schema/easyFilter/easyfilter-2.0.xsd">
      
      <!--######################### Request keyword filter ######################### -->
      <keywordFilter>
         <!-- 
             - 是否开启请求关键字过滤
             - on: 开启 
             - off: 关闭
         -->
         <filter>on</filter>
         <!-- 
             发现关键字后,如果没有为关键字指定替换字符,则使用该默认值替换
         -->
         <defaultReplace></defaultReplace>
         <!-- 
             - 关键字替换列表 
             - 格式: keyword replace 
             - 注意: 在XML文档中特殊字符必须使用字符实体表示
         -->
         <replaceList>
             <replace keyword="&lt;" replace="&amp;lt;"></replace>
             <replace keyword="&gt;" replace="&amp;gt;"></replace>
             <replace keyword="fuck" replace="f***"></replace>
             <!-- 
             <replace keyword="bitch" replace="love"></replace>
             <replace keyword="毒品" replace="XX"></replace> 
             -->
         </replaceList>
         <!-- 
             - 排除关键字过滤的请求参数名称列表 
             - 格式: 参数名称正则表达式##参数名称正则表达式2##...
             - 支持正则表达式 
         -->
         <excludeParameters>
             <keyword>password</keyword>
             <keyword>.*.password</keyword>
             <keyword>confirmPwd</keyword>
         </excludeParameters>
         <!-- 
             - 排除关键字过滤的uri列表,uri为request.getRequestURI()获得的值 
             - 格式: URI正则表达式##URI正则表达式2##... 
             - 支持正则表达式 
         -->
         <excludeURI>
         <!--      
                 <uri>/test\.jsp</uri> 
                 <uri>add\.action</uri> 
         -->    
         </excludeURI>
      </keywordFilter>
      
      <!-- ######################### SQL inject keyword filter ######################### -->
      <sqlFilter>
         <!-- 
             - 是否开启SQL注入关键字过滤
             - on: 开启 
             - off: 关闭 
         -->
         <filter>off</filter>
         <!-- 
             - SQL注入关键字列表,这些字符将被替换为空字符 
             -  Format: 关键字1##关键字2##... 
         -->
         <injectFilterList>
             <value>
                 and##exec##insert##select##delete##update##count##chr##mid##master##truncate##char##declare##or
             </value>
             <value>
                 ;##-##+##,##*##% 
             </value>
         </injectFilterList>
         <!-- 
             - 包含SQL注入关键字过滤的请求参数名称列表 
             - 格式: 参数名称正则表达式##参数名称正则表达式2##... 
             - 支持正则表达式 
             - eg. sysUser.name 
         -->
         <includeParameters>
             <!-- 
                 <value>sysUser.name</value> 
             -->
         </includeParameters>
      </sqlFilter>
      </easyFilter>
    • 配置方式二:easyFilter.properties

      # EasyFilter
      # @author easyproject.cn 
      # @author inthinkcolor@gmail.com
      
      ######################### 请求关键字过滤部分 #########################
      
      # 是否开启请求关键字过滤
      # on: 开启
      # off: 关闭
      # 如果不是on,则按off处理
      keywordFilter=on
      
      # 发现关键字后,如果没有为关键字指定替换字符,则使用该默认值替换
      defaultReplace=
      
      # 关键字替换列表
      # 格式: 关键字,替换值##关键字2,替换值2##...
      keywordAndReplaceList= <,&lt;  \#\#  >,&gt;  
      
      # 自定义关键字替换条目
      # 如果keywordAndReplaceList已经存在相同的关键字,自定义条目优先
      # 格式: 关键字=替换值
      # eg. bitch=love
      # eg. \u6BD2\u54C1=*
      fuck=f***
      
      # 排除关键字过滤的请求参数名称列表
      # 格式: 参数名称正则表达式##参数名称正则表达式2##...
      # 支持正则表达式
      excludeKeywordFilterParameters=password\#\#.*.password\\##confirmPwd
      
      # 排除关键字过滤的uri列表,uri为request.getRequestURI()获得的值
      # 格式: URI正则表达式##URI正则表达式2##...
      # Supports regex expressions
      # eg. excludeKeywordFilterURI=/test\.jsp##add\.action
      excludeKeywordFilterURI=
      
      ######################### SQL注入关键字过滤 #########################
      
      # 是否开启SQL注入关键字过滤
      # on: 开启
      # off: 关闭
      # 如果不是on,则按off处理
      sqlInjectFilter=off
      
      # SQL注入关键字列表,这些字符将被替换为空字符
      # 格式: 关键字1##关键字2##...
      sqlInjectFilterList=and##exec##insert##select##delete##update##count##*##%##chr##mid##master##truncate##char##declare##;##or##-##+##,
      
      # 包含SQL注入关键字过滤的请求参数名称列表
      # 格式: 参数名称正则表达式##参数名称正则表达式2##...
      # 支持正则表达式
      # eg. includeSqlInjectFilterParameters=sysUser.name
      includeSqlInjectFilterParameters=

结束

留言评论

如果您有更好意见,建议或想法,请联系我。

联系、反馈、定制、培训 Email:inthinkcolor@gmail.com


支付宝钱包扫一扫捐助:

支付宝钱包扫一扫捐助

http://www.easyproject.cn