-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added more filters on XSS and implemented basic SQL injection filter
References #151791
- Loading branch information
Showing
4 changed files
with
90 additions
and
2 deletions.
There are no files selected for viewing
72 changes: 72 additions & 0 deletions
72
web/src/main/java/ro/finsiel/eunis/security/SqlInjectFilter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package ro.finsiel.eunis.security; | ||
|
||
import org.apache.log4j.Logger; | ||
import java.io.IOException; | ||
import java.util.Enumeration; | ||
import javax.servlet.Filter; | ||
import javax.servlet.FilterChain; | ||
import javax.servlet.FilterConfig; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.ServletRequest; | ||
import javax.servlet.ServletResponse; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
/** | ||
* SQL injection filter | ||
* | ||
* @author CSDN: seesun2012 | ||
*/ | ||
public class SqlInjectFilter implements Filter { | ||
|
||
private String[] filters; | ||
private static Logger logger = Logger.getLogger(SqlInjectFilter.class); | ||
|
||
/** | ||
* Filers request parameters for SQL injection attempts | ||
* @param request HTTP request | ||
* @param response HTTP response | ||
* @param chain Filter chain | ||
* @throws IOException | ||
* @throws ServletException | ||
*/ | ||
@Override | ||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | ||
HttpServletRequest httprequest = (HttpServletRequest) request; | ||
Enumeration<?> params = httprequest.getParameterNames(); | ||
StringBuilder sql = new StringBuilder(); | ||
while(params.hasMoreElements()) { | ||
String name = params.nextElement().toString(); | ||
String[] value = httprequest.getParameterValues(name); | ||
for (String s : value) { | ||
sql.append(s); | ||
} | ||
} | ||
|
||
if(containsFilteredChars(sql.toString())) { | ||
HttpServletResponse r = (HttpServletResponse) response; | ||
r.sendError(HttpServletResponse.SC_BAD_REQUEST); | ||
} else{ | ||
chain.doFilter(request, response); | ||
} | ||
} | ||
|
||
private boolean containsFilteredChars(String str) { | ||
for (String badStr : filters) { | ||
if (str.contains(badStr)) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
@Override | ||
public void init(FilterConfig filterConfig) throws ServletException { | ||
String sqlInjectStrList = filterConfig.getInitParameter("sqlInjectStrList"); | ||
filters = sqlInjectStrList.split("\\|"); | ||
} | ||
|
||
@Override | ||
public void destroy() { | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters