AntiSamy XSS攻撃を解決

1、jarファイルパッケージをダウンロード

xercesImpl.jar     http://xerces.apache.org/mirrors.cgi#binary 

batik.jar               http://xmlgraphics.apache.org/batik/download.cgi 

nekohtml.jar        http://sourceforge.net/projects/nekohtml/ 

2、ポリシーファイルをダウンロード(ポリシーファイルのさまざまなバージョンがあります)

http://central.maven.org/maven2/org/owasp/antisamy/antisamy-sample-configs/

詳細なポリシーファイルhttps://blog.csdn.net/raychiu757374816/article/details/79016101

3、カスタムフィルタ

インポートにjava.io.IOException;
インポートは、javax.servlet.Filter;
輸入れるjavax.servlet.FilterChain。
インポートするjavax.servlet.FilterConfig。
輸入javax.servlet.ServletException;
輸入javax.servlet.ServletRequest;
インポートのjavax.servlet.ServletResponse。
インポートのjavax.servlet.http.HttpServletRequest;
パブリッククラスXssFilterはフィルター{実装
  @SuppressWarnings(「未使用」)
  私的に、FilterConfigに、FilterConfigを。
  公共ボイド){(破壊
    this.filterConfig = NULL;
  }
  公共ボイドのdoFilter(のServletRequest要求たServletResponse応答
          れるFilterChain鎖)にIOException、ServletExceptionがを{スロー
    chain.doFilter(新しいRequestWrapper((HttpServletRequestの)要求)、応答);
  }
  公共ボイドのinit(に、FilterConfigに、FilterConfig)はServletExceptionがスロー{
    this.filterConfig =に、FilterConfig。
  }
}

図4に示すように、要求クラス継承カスタム方法であって、前記のHttpServletRequestWrapperクラス書き換え部

インポートするjava.util.Iterator;
輸入java.util.Map;
インポートのjavax.servlet.http.HttpServletRequest;
輸入javax.servlet.http.HttpServletRequestWrapper。
輸入org.owasp.validator.html.AntiSamy。
輸入org.owasp.validator.html.CleanResults。
輸入org.owasp.validator.html.Policy。
輸入org.owasp.validator.html.PolicyException。
輸入org.owasp.validator.html.ScanException。

パブリッククラスRequestWrapperはHttpServletRequestWrapperクラス延び{

  公共RequestWrapper(HttpServletRequestのリクエスト){
    スーパー(リクエスト)。
  }

  @SuppressWarnings({ "rawtypes"、 "未チェック"})
  パブリックマップ<文字列、文字列[]> getParameterMap(){
    地図<文字列、文字列[]> request_map = super.getParameterMap()。
    。イテレータイテレータ= request_map.entrySet()反復子();
    ながら(iterator.hasNext()){
      (のMap.Entry)=私のMap.Entry iterator.next()。
      文字列[]の値=(文字列[])me.getValue();
      {ため(; iはvalues.length <I ++は、I = 0 INT)
        のSystem.out.println(値[i])とします。
        値[I] = xssClean(値[I])。
      }
    }
    戻りrequest_map。
  }

  @SuppressWarnings({ "rawtypes"、 "未チェック"})
  パブリック文字列のgetParameter(文字列名){
    文字列V = super.getParameter(名);
    もし(V == null)の
      リターンはnull;
    (V)xssCleanを返します。
  }

  @SuppressWarnings({ "rawtypes"、 "未チェック"})
  パブリック文字列[] getParameterValues(文字列名){
    文字列[] V = super.getParameterValues(名);
    もし(V == nullの|| v.length == 0)
      リターンV;
    以下のために(INT i = 0; iはv.length <; iは++){
      Vの[I] = xssClean(V [I])。
    }
    戻りV。
  }

  プライベート文字列xssClean(文字列値){
    AntiSamy antiSamy =新しいAntiSamy()。
    試す{
      ポリシーポリシーは= Policy.getInstanceの( "/ antisamy-slashdot.xml");
      最終CleanResults CR = antiSamy.scan(値、ポリシー)。
      cr.getCleanHTMLを返します();
    }キャッチ(ScanException電子){
      e.printStackTrace();
    }キャッチ(PolicyException電子){
      e.printStackTrace();
    }
    戻り値。
  }
}

図5に示すように、コンフィギュレーション・インターセプタは、要求処理要求パラメータをインターセプト

<フィルター>
<フィルタ名> XSSFilter </フィルタ名>
<フィルタクラス> org.jeecgframework.core.filter.XssFilter </フィルタリングクラス>
</フィルタ>
<フィルタマッピング>
<フィルタ名> XSSFilter </フィルタ名>
の<url-pattern> / * </のurl-pattern>
</のfilter-mapping>


完全紹介。

おすすめ

転載: www.cnblogs.com/qc2018/p/10988430.html