sql盲注 解决_解决SQL盲注和跨站脚本攻击
今天測試用IBM的AppScan,對系統進行測試,發現了系統的安全漏洞,分別是SQL盲注和跨站腳本攻擊,這兩種安全隱患都是利用參數傳遞的漏洞趁機對系統進行攻擊。截圖如下:
解決方案(參考網上的例子):自己寫一個 Filter,使用 Filter 來過濾瀏覽器發出的請求。對每個 post 請求的參數過濾一些關鍵字,替換成安全的,例如:< > ' " \ / # & 。方法是實現一個自定義的 HttpServletRequestWrapper,然后在 Filter 里面調用它,替換掉 getParameter 函數即可,具體步驟如下。
首先,在后臺添加一個 XssHttpServletRequestWrapper 類,代碼如下。
packagecom.iss.sas.web.base;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletRequestWrapper;public class XssHttpServletRequestWrapper extendsHttpServletRequestWrapper {publicXssHttpServletRequestWrapper(HttpServletRequest servletRequest) {super(servletRequest);
}publicString[] getParameterValues(String parameter) {
String[] values= super.getParameterValues(parameter);if (values==null) {return null;
}int count =values.length;
String[] encodedValues= newString[count];for (int i = 0; i < count; i++) {
encodedValues[i]=cleanXSS(values[i]);
}returnencodedValues;
}publicString getParameter(String parameter) {
String value= super.getParameter(parameter);if (value == null) {return null;
}returncleanXSS(value);
}publicString getHeader(String name) {
String value= super.getHeader(name);if (value == null)return null;returncleanXSS(value);
}privateString cleanXSS(String value) {//You'll need to remove the spaces from the html entities below
value = value.replaceAll("", "& gt;");
value= value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
value= value.replaceAll("'", "& #39;");
value= value.replaceAll("eval\\((.*)\\)", "");
value= value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value= value.replaceAll("script", "");returnvalue;
}
}
然后,同樣在后臺添加一個過濾器 XssFilter,具體代碼如下。
packagecom.iss.sas.web.base;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;public class XssFilter implementsFilter {
FilterConfig filterConfig= null;public void init(FilterConfig filterConfig) throwsServletException {this.filterConfig =filterConfig;
}public voiddestroy() {this.filterConfig = null;
}public voiddoFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throwsIOException, ServletException {
chain.doFilter(newXssHttpServletRequestWrapper(
(HttpServletRequest) request), response);
}
}
最后,在 web.xml 里面配置一下,所有請求的 getParameter 會被替換,如果參數里面含有敏感詞會被替換掉。
XssSqlFilter
com.iss.sas.web.base.XssFilter
XssSqlFilter
/*
REQUEST
總結:雖然MyBatis使用占位符的方式接收參數傳遞,為SQL盲注提供了很好的解決方案,但這只是避免了一部分問題,用戶還可以利用參數作為切入點,對網站進行非法攻擊,所以還要考慮到對參數的危險字符進行過濾和攔截。
總結
以上是生活随笔為你收集整理的sql盲注 解决_解决SQL盲注和跨站脚本攻击的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: threejs坐标转换
- 下一篇: 操作系统高响应比优先调度算法模拟实验