快捷搜索:   nginx

超强JSP防SQL注入攻击

 第一种采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可: 

String sql= "select * from users where username=? and password=?;  PreparedStatement preState = conn.prepareStatement(sql);  preState.setString(1, userName);  preState.setString(2, password);  ResultSet rs = preState.executeQuery();  ... 
第二种是采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入
例1 public static String TransactSQLInjection(String str)  {  return str.replaceAll(".*([';]+|(--)+).*", " ");  } 
userName=TransactSQLInjection(userName);  password=TransactSQLInjection(password); 
String sql="select * from users where username='"+userName+"' and password='"+password+"' "  Statement sta = conn.createStatement();  ResultSet rs = sta.executeQuery(sql);  ...
或者例2
要引入的包: import java.util.regex.*;
正则表达式: private String CHECKSQL = “^(.+)\\sand\\s(.+)|(.+)\\sor(.+)\\s$”;
判断是否匹配: Pattern.matches(CHECKSQL,targerStr);
下面是具体的正则表达式: 检测SQL meta-characters的正则表达式 : /(\%27)|(\’)|(\-\-)|(\%23)|(#)/ix 修正检测SQL meta-characters的正则表达式:/((\%3D)|(=))[^\n]*((\%27)|(\’)|(\-\-)|(\%3B)|(:))/i 典型的 SQL 注入攻击的正则表达式:/\w*((\%27)|(\’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix 检测SQL注入,UNION查询关键字的正则表达式 :/((\%27)|(\’))union/ix(\%27)|(\’) 检测MS SQL Server SQL注入攻击的正则表达式: /exec(\s|\+)+(s|x)p\w+/ix 等等…..
第三种是字符串过滤
例1
sql_inj.java为一个改进的防注入bean,编译后将class文件放在tomcat的classes下的sql_inj目录中。
sql_inj.java代码: ==================================================================== package sql_inj;
import java.net.*;  import java.io.*; import java.sql.*; import java.text.*; import java.lang.String;
public class sql_inj{  public static boolean sql_inj(String str) {     String inj_str ="'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";//这里的东西还可以自己添加 String[] inj_stra=inj_str.split("\\|");     for (int i=0 ; i < inj_stra.length ; i++ )     {         if (str.indexOf(inj_stra[i])>=0)         {             return true;         }     }     return false; } } ====================================================================
JSP页面判断代码: ==================================================================== <jsp:useBean id="sql_inj" class="sql_inj.sql_inj" scope="page"/> <% String   currenturl   =   request.getRequestURI()+(request.getQueryString()==null?"":("?"+request.getQueryString())); if (sql_inj.sql_inj(currenturl)){ //判断url及参数中是否包含注入代码,是的话就跳转到某页。 response.sendRedirect("/"); return; } //out.println(currenturl);
例2
public static boolean sql_inj(String str) { String inj_str = "'|and|exec|insert|select|delete|update| count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,"; String inj_stra[] = split(inj_str,"|"); for (int i=0 ; i < inj_stra.length ; i++ ) { if (str.indexOf(inj_stra[i])>=0) { return true; } } return false; }
4.jsp中调用该函数检查是否包函非法字符 =======================================
防止SQL从URL注入:
sql_inj.java代码: =======================================
package sql_inj; import java.net.*; import java.io.*; import java.sql.*; import java.text.*; import java.lang.String; public class sql_inj{ public static boolean sql_inj(String str) { String inj_str = "'|and|exec|insert|select|delete|update| count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,"; //这里的东西还可以自己添加 String[] inj_stra=inj_str.split("\\|"); for (int i=0 ; i < inj_stra.length ; i++ ) { if (str.indexOf(inj_stra[i])>=0) { return true; } } return false; } }====================================== 5.JSP页面判断代码: ===================================
使用javascript在客户端进行不安全字符屏蔽
功能介绍:检查是否含有”‘”,”\\”,”/” 参数说明:要检查的字符串 返回值:0:是 1:不是 函数名是 function check(a) { return 1; fibdn = new Array (”‘” ,”\\”,”/”); i=fibdn.length; j=a.length; for (ii=0; ii<i; ii++) { for (jj=0; jj<j; jj++) { temp1=a.charAt(jj); temp2=fibdn[ii]; if (tem’; p1==temp2) { return 0; } } } return 1;
}
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论