Struts2学习4——防sql注入过滤器
来源:互联网 发布:php exec 127 编辑:程序博客网 时间:2024/06/05 16:05
web.xml
<!-- sql Filter --> <filter> <filter-name>SqlFilter</filter-name> <filter-class>Utils.SqlFilter</filter-class> </filter> <filter-mapping> <filter-name>SqlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Utils.SqlFilter
package Utils;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关键字的Filterpublic class SqlFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; // 获得所有请求参数名 Enumeration<?> params = req.getParameterNames(); String sql = ""; while (params.hasMoreElements()) { // 得到参数名 String name = params.nextElement().toString(); // System.out.println("name===========================" + name + // "--"); // 得到参数对应值 String[] value = req.getParameterValues(name); for (int i = 0; i < value.length; i++) { sql = sql + value[i]; } } //System.out.println("被匹配字符串:" + sql); if (sqlValidate(sql)) { res.sendRedirect("/error.jsp"); } else { chain.doFilter(req, res); } } // 校验 protected static boolean sqlValidate(String str) { str = str.toLowerCase();// 统一转为小写 // String badStr = "and|exec"; String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|chr|mid|master|truncate|char|declare|sitename|net user|xp_cmdshell|or|like"; /* * String badStr = * "'|and|exec|execute|insert|create|drop|table|from|grant|use|group_concat|column_name|" * + * "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" * + "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#"; */// 过滤掉的sql关键字,可以手动添加 String[] badStrs = badStr.split("\\|"); for (int i = 0; i < badStrs.length; i++) { if (str.indexOf(badStrs[i]) != -1) { System.out.println("匹配到:" + badStrs[i]); return true; } } return false; } public void init(FilterConfig filterConfig) throws ServletException { // throw new UnsupportedOperationException("Not supported yet."); } public void destroy() { // throw new UnsupportedOperationException("Not supported yet."); }}
另外程序代码中避免字符串拼接,使用PreparedStatement。
原文参考:
http://blog.csdn.net/u012377333/article/details/51535483
阅读全文
0 0
- Struts2学习4——防sql注入过滤器
- java 过滤器filter防sql注入
- java 过滤器filter防sql注入
- java 过滤器filter防sql注入
- 防sql注入&文本框防sql注入
- SQL防注入大全——史上最全的 SQL 注入资料
- 防SQL注入
- SQL防注入简介
- SQL防注入简介
- SQL防注入
- SQL防注入简介
- asp sql 防注入
- 防SQL注入
- 防SQL注入攻击
- SQL防注入简介
- 'SQL防注入
- 防sql注入代码
- 防sql注入
- 程序猿必懂的排序方法(1)--插入排序
- eclipse 运行C++问题(centos7)
- 自学Java之Java类库(使用Swing)(009day)
- [js点滴]JavaScript之WebSocket 技术
- 为网站增添结构化资料
- Struts2学习4——防sql注入过滤器
- 聚类分析2
- Hibernate第一讲
- Debian中文输入法的配置
- java代码实现oracle sql语句转mysql sql语句
- WebApi 接口参数不再困惑:传参详解
- oracle 数据泵 network link使用
- 将博客搬至CSDN
- CSS white-space 属性