防止sql注入
程序员文章站
2022-05-06 21:28:40
其实就是将一些数据库的关键词在用户输入的后通过参数传入后台后,检验用户传入的参数是够包含该数据库的关键词,来过滤掉。可能这样写有一些漏洞,希望大神们前来纠正错误。下面代码贴上。 ......
其实就是将一些数据库的关键词在用户输入的后通过参数传入后台后,检验用户传入的参数是够包含该数据库的关键词,来过滤掉。可能这样写有一些漏洞,希望大神们前来纠正错误。下面代码贴上。
1 public class SQLInjectionFilter implements Filter{ 2 public void destroy() { 3 // TODO Auto-generated method stub 4 } 5 6 public void init(FilterConfig arg0) throws ServletException { 7 // TODO Auto-generated method stub 8 } 9 10 public void doFilter(ServletRequest request, ServletResponse response, 11 FilterChain chain) throws IOException, ServletException { 12 HttpServletRequest req=(HttpServletRequest) request; 13 HttpServletResponse res=(HttpServletResponse) response; 14 //获得所有请求参数名 15 Enumeration params = req.getParameterNames(); 16 String sql = ""; 17 //获得请求的URL 18 while (params.hasMoreElements()) { 19 //得到参数名 20 String name = params.nextElement().toString(); 21 //得到参数对应值 22 String[] value = req.getParameterValues(name); 23 if(value!=null&&!value[0].equals("-1")){ 24 for (int i = 0; i < value.length; i++) { 25 sql = sql + value[i]; 26 } 27 } 28 } 29 30 //检验输出的参数是否包含关键词 31 if (sqlValidate(sql)) { 32 PrintWriter out = res.getWriter(); 33 out.print("<script>alert('您发送的请求参数中含有非法字符')</script>"); 34 out.close(); 35 }else{ 36 chain.doFilter(request,response); 37 } 38 } 39 40 //归总的sql关键词 41 protected static boolean sqlValidate(String str) { 42 str = str.toLowerCase();//统一转为小写 43 String badStr = "'|and|exec|waitfot|delay|sysusers|html|function|group by|database|user|system_user|session_user|substring|" + 44 "sysobjects|chongqing|script|ajax|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" + 45 "char|declare|sitename|net user|xp_cmdshell|like'|create|table|from|grant|use|group_concat|column_name|" + 46 "information_schema.columns|table_schema|union|where|order|by|--|+|like|#";//过滤掉的sql关键字,可以手动添加 47 String[] badStrs = badStr.split("\\|"); 48 for (int i = 0; i < badStrs.length; i++) { 49 //循环检测,判断在请求参数当中是否包含SQL关键字 50 if (str.indexOf(badStrs[i]) >= 0) { 51 return true; 52 } 53 } 54 return false; 55 }
推荐阅读
-
sql server中批量插入与更新两种解决方案分享(存储过程)
-
网站攻击方式有哪些,防止网站被攻击的方法
-
SQL Server修改标识列方法 如自增列的批量化修改
-
Sql Server 索引使用情况及优化的相关Sql语句分享
-
SQL Server中通过扩展存储过程实现数据库的远程备份与恢复
-
sql server中通过查询分析器实现数据库的备份与恢复方法分享
-
几个简单的基本的sql语句
-
SQL Server 作业的备份(备份作业非备份数据库)
-
卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法
-
sql 判断数据库,表,存储过程等是否存在的代码