java 過濾器filter防sql注入的實現(xiàn)代碼
實例如下:
XSSFilter.java
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
//flag = true 只做URL驗證; flag = false 做所有字段的驗證;
boolean flag = true;
if(flag){
//只對URL做xss校驗
HttpServletRequest httpServletRequest = (HttpServletRequest) servletrequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletresponse;
String requesturi = httpServletRequest.getRequestURL().toString();
requesturi = URLDecoder.decode(requesturi, "UTF-8");
if(requesturi!=null&&requesturi.indexOf("alipay_hotel_book_return.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return;
}
if(requesturi!=null&&requesturi.indexOf("account_bank_return.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return;
}
if(requesturi!=null&&requesturi.indexOf("/alipay/activity.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return ;
}
if(requesturi!=null&&requesturi.indexOf("/alipayLogin.html")!=-1){
filterchain.doFilter(servletrequest, servletresponse);
return ;
}
RequestWrapper rw = new RequestWrapper(httpServletRequest);
String param = httpServletRequest.getQueryString();
if(!"".equals(param) && param != null) {
param = URLDecoder.decode(param, "UTF-8");
String originalurl = requesturi + param;
String sqlParam = param;
//添加sql注入的判斷
if(requesturi.endsWith("/askQuestion.html") || requesturi.endsWith("/member/answer.html")){
sqlParam = rw.cleanSQLInject(param);
}
String xssParam = rw.cleanXSS(sqlParam);
requesturi += "?"+xssParam;
if(!xssParam.equals(param)){
System.out.println("requesturi::::::"+requesturi);
httpServletResponse.sendRedirect(requesturi);
System.out.println("no entered.");
// filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);
return ;
}
}
filterchain.doFilter(servletrequest, servletresponse);
}else{
//對請求中的所有東西都做校驗,包括表單。此功能校驗比較嚴格容易屏蔽表單正常輸入,使用此功能請注意。
filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);
}
}
requestMapping:
public RequestWrapper(){
super(null);
}
public RequestWrapper(HttpServletRequest httpservletrequest) {
super(httpservletrequest);
}
public String[] getParameterValues(String s) {
String str[] = super.getParameterValues(s);
if (str == null) {
return null;
}
int i = str.length;
String as1[] = new String[i];
for (int j = 0; j < i; j++) {
as1[j] = cleanXSS(cleanSQLInject(str[j]));
}
return as1;
}
public String getParameter(String s) {
String s1 = super.getParameter(s);
if (s1 == null) {
return null;
} else {
return cleanXSS(cleanSQLInject(s1));
}
}
public String getHeader(String s) {
String s1 = super.getHeader(s);
if (s1 == null) {
return null;
} else {
return cleanXSS(cleanSQLInject(s1));
}
}
public String cleanXSS(String src) {
String temp =src;
System.out.println("xss---temp-->"+src);
src = src.replaceAll("<", "<").replaceAll(">", ">");
// if (src.indexOf("address")==-1)
// {
src = src.replaceAll("\\(", "(").replaceAll("\\)", ")");
//}
src = src.replaceAll("'", "'");
Pattern pattern=Pattern.compile("(eval\\((.*)\\)|script)",Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(src);
src = matcher.replaceAll("");
pattern=Pattern.compile("[\\\"\\'][\\s]*javascript:(.*)[\\\"\\']",Pattern.CASE_INSENSITIVE);
matcher=pattern.matcher(src);
src = matcher.replaceAll("\"\"");
//增加腳本
src = src.replaceAll("script", "").replaceAll(";", "")
.replaceAll("\"", "").replaceAll("@", "")
.replaceAll("0x0d", "")
.replaceAll("0x0a", "").replaceAll(",", "");
if(!temp.equals(src)){
System.out.println("輸入信息存在xss攻擊!");
System.out.println("原始輸入信息-->"+temp);
System.out.println("處理后信息-->"+src);
}
return src;
}
//需要增加通配,過濾大小寫組合
public String cleanSQLInject(String src) {
String temp =src;
src = src.replaceAll("insert", "forbidI")
.replaceAll("select", "forbidS")
.replaceAll("update", "forbidU")
.replaceAll("delete", "forbidD")
.replaceAll("and", "forbidA")
.replaceAll("or", "forbidO");
if(!temp.equals(src)){
System.out.println("輸入信息存在SQL攻擊!");
System.out.println("原始輸入信息-->"+temp);
System.out.println("處理后信息-->"+src);
}
return src;
}
xml配置:
<filter> <filter-name>XssFilter</filter-name> <filter-class>cn.com.jsoft.xss.XSSFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>XssFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
以上代碼僅僅將特殊的sql字符,特殊script腳本字符處理掉,具體的頁面處理還需要后臺處理??!
關(guān)于這篇java 過濾器filter防sql注入的實現(xiàn)代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java并發(fā)編程volatile關(guān)鍵字的作用
這篇文章主要介紹了Java并發(fā)編程volatile關(guān)鍵字的作用,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07
java代碼獲取數(shù)據(jù)庫表里數(shù)據(jù)的總數(shù)操作
這篇文章主要介紹了java代碼獲取數(shù)據(jù)庫表里數(shù)據(jù)的總數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java實現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換
這篇文章主要介紹了Java實現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換,幫助大家更好的利用Java處理數(shù)據(jù),感興趣的朋友可以了解下2020-09-09
使用Prometheus監(jiān)控Tomcat等java應用的狀態(tài)
本文介紹了如何配置Tomcat監(jiān)控,使用JMX Exporter和Prometheus進行監(jiān)控,并通過Grafana展示監(jiān)控數(shù)據(jù)2024-12-12
JAVA構(gòu)造函數(shù)不能使用void關(guān)鍵字問題
這篇文章主要介紹了JAVA構(gòu)造函數(shù)不能使用void關(guān)鍵字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
Springboot項目全局異常統(tǒng)一處理案例代碼
最近在做項目時需要對異常進行全局統(tǒng)一處理,主要是一些分類入庫以及記錄日志等,因為項目是基于Springboot的,所以去網(wǎng)絡(luò)上找了一些博客文檔,然后再結(jié)合項目本身的一些特殊需求做了些許改造,現(xiàn)在記錄下來便于以后查看2023-01-01
springboot實現(xiàn)maven多模塊和打包部署
本文主要介紹了springboot實現(xiàn)maven多模塊和打包部署,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04
Spring Security自定義身份認證的實現(xiàn)方法
這篇文章主要介紹了Spring Security自定義身份認證的實現(xiàn)方法,下面對Spring Security的這三種自定義身份認證進行詳細講解,需要的朋友可以參考下2025-04-04

