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 &lt; inj_stra.length ; i++ ) { if (str.indexOf(inj_stra[i])&gt;=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 &lt; inj_stra. length ; i ++ ) { if (str. indexOf (inj_stra [i ] ) &gt;=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、付费专栏及课程。

余额充值