三个超强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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值