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; /** *
[java] view plin
copy
/** *
一つは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; } )