SQL注入とXSS攻撃防止Filter

4225 ワード

今日のシステムはIBMのセキュリティ・ホールスキャンツールを使って、一連の穴をスキャンしました。次のfilterは主にSQL注入とXSS攻撃を防ぐために解決します。
一つはFilterがお願いしたrequestを包装します。
一つはrequest包装器で、不法な文字をフィルタリングします。
このフィルターを配置したら、世界はようやくきれいになりました。
コードは以下の通りです
[java]  view plin
 copy
import java.io.IOException      import javax.servlet.Filter;   import javax.servlet.FilterCharin;   import javax.servlet.FilterConfig;   import javax.servlet.Servlet Exception;   import javax.servlet.ServletRequest;   import javax.servlet.Servlet Resonse;   import javax.servlet.http.HttpServlet Request;      /**   *  {@link CharLimitFilter}   *   * ブロッキング防止sql注入   *   * @author Administrator   */   public クラス XssFilter implements Filter {             /* (non-Javadoc)       * @see javax.servlet.Filter菵(javax.servlet.Servlet.Servlet.Request) javax.servlet.Servlet Resonse、 javax.servlet.FilterCharin)       */       public void ドFilter(Servlet Request) request Servlet Resonse レスポンス FilterCharin filterCharin) ローソン IOException、               Servlet Exception {                          XssHttp Servlet Request Wrapper xssRequest = new XssHttp Servlet Request Wrapper(               (HttpServletRequest) request;               filterChane.dofilter(xssRequest) レスポンス                  }      )   包装器:
[java]  view plin
 copy
/**   *  {@link XssHttpServletRequestWrapper}   *   * TODO : document 私   *   * @author Administrator   */   public クラス XssHttp Servlet Request Wrapper extens Http Servlet Request Wrapper {       HttpServlet Request orgRequest = null          public XssHttp Servlet Request Wrapper request {           super(request)           orgRequest = request;       }          /**      * getParameeterメソッドを上書きし、パラメータ名とパラメータ値をxssフィルタします。      * 元の値を求めるなら、super.getParameterValuesで取得する。      * getParameter Names、getParameterValues、get ParameterMapもカバーが必要かもしれません。      */       @オーバーライド       public String get Parameeter(String) name {           String value = super.get Parameeter(xssEncoce);           if (value != null {               value = xssEnco de;           }           return value;       }          /**      * get Headerメソッドを上書きして、パラメータ名とパラメータ値をすべてxssフィルタします。      * 元の値が必要であれば、super.getHeaders(name)によって取得される。      * get Header Names 上書きする必要もあります。      */       @オーバーライド       public String get Header(String) name {              String value = super.get Header(xssEnccode);           if (value != null {               value = xssEnco de;           }           return value;       }          /**      * xssホールを引き起こしやすい半角文字を全角文字に直接置換します。      *      * @パラム s      * @return      */       prvate static String xssencode(String) s) {           if (s) == null || 「」.equals(s) {               return s;           }           StringBuider sb = new StringBuider(s.length() + 16)           for (int i = 0; i              char c = s.chart(i);               スイッチ (c) {               case '>':                   sb.apped(''')//全角が番号より大きい                   break;               case ':                   sb.apped(')//全角が番号より小さい                   break;               case '\'':                   sb.apped(')//全角シングル引用符                   break;               case '\':                   sb.apped(')//全角双引用符                   break;               case '&':                   sb.apped('&')//全角                   break;               case '\\':                   sb.apped('\')//全角斜線                   break;               case '#':                   sb.apped('#')//全角井番号                   break;               default:                   sb.apped(c)                   break;               }           }           return sb.toString()       }          /**      * 元のrequestを取得します。      *      * @return      */       public HttpServlet Request get Org Request() {           return orgRequest;       }          /**      * 元のrequestを取得する静的方法      *      * @return      */       public static HttpServlet Request get Org Request req) {           if (req instance of XssHttp Servlet Request Wrapper) {               return (XssHttp Servlet Request Wrapper) req).getOrgRequest()           }              return req;       }      )