java(or jsp)防sql注入
来源:互联网 发布:ae cc 2014 mac安装 编辑:程序博客网 时间:2024/04/29 18:57
1.使用prepareStatemenet
2.使用正则表达式
表达式一:Regex knownBad = new Regex(@"^?;/;/--|d(?:elete/sfrom|rop/stable)|insert/sintols(?:elect/s/*|p_)|union/sselect|xp_$");
表达式二: 检测SQL meta-characters的正则表达式
/((/%3D)|(=))[^/n]*((/%27)|(/')|(/-/-)|(/%3B)|(:))/i
UNION查询关键字的正则表达式
/((/%27)|(/'))union/ix
/exec(/s|/+)+(s|x)p/w+/ix
这几条配合使用比较好
本来对正则表达式不是很了解,但由于项目需要,项目主要没有采用存储过程方式来存储SQL语句,所以很有可能被黑客用SQL注入攻击,现在就在网上找了找解决办法,在业务层来过滤SQL语句,防止SQL注入攻击,主要是采用了正则表达式,因为正则表达式对字符串的操作是很强大的.
首先用一个Validate()类来封装正则表达式和相关操作:
//验证是否有SQL注入字符
private bool ValidateQuery(Hashtable queryConditions)
{
//构造SQL的注入关键字符
#region 字符
string[] strBadChar = {"and"
,"exec"
,"insert"
,"select"
,"delete"
,"update"
,"count"
,"or"
//,"*"
,"%"
,":"
,"/'"
,"/""
,"chr"
,"mid"
,"master"
,"truncate"
,"char"
,"declare"
,"SiteName"
,"net user"
,"xp_cmdshell"
,"/add"
,"exec master.dbo.xp_cmdshell"
,"net localgroup administrators"};
#endregion//构造正则表达式
string str_Regex = ".*("
for (int i = 0; i < strBadChar.Length - 1; i++)
{
str_Regex += strBadChar[i] + "|"
}
str_Regex += strBadChar[strBadChar.Length - 1] + ").*"
//避免查询条件中_list情况
foreach (string str in queryConditions.Keys)
{
if(str.Substring(str.Length - 5)=="_list")
{
//去掉单引号检验
str_Regex = str_Regex.Replace("|'|", "|");
}
string tempStr = queryConditions[str].ToString();
if (Regex.Matches(tempStr.ToString(), str_Regex).Count > 0)
{
//有SQL注入字符
return true;
}
}
return false;
}
queryConditions 是一个hashtable,用于传入查询条件,hashtable中的键值(key)为:@name,相对应SQL中的参数,那Value则对应为参数的实际值了.
正则表达式的应用主要是按这样的规律来过滤字符串的:
.*(and|exec|select|update|or|'|''|).* // str_Regex
核心函数主要是: Regex.Matches(tempStr.ToString(), str_Regex).
要是在 tempStr 字符串中含有非法字符, 则函数的Count值将大于0
好了,就这样就可以判断是否含有SQL注入攻击字符了.
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Text.RegularExpressions;
{
public class WebSecurityObject
{
public WebSecurityObject()
{
public static bool IsNumeric(string checkText)
{
Regex reg=new Regex(@"^/d$");
return reg.IsMatch(checkText);
}
{
string tempString=checkText;
if (NeedUrlCodeCheck)
tempString = HttpUtility.UrlDecode(tempString);
//说明:不能存在'+空格的存在,并且,不能有空格+字符+空格的命令存在
string sqlString = @"/s*/'/s+|/s(and|exec|insert|select|delete|update|count|/*|/%|chr|mid|master|truncate|char|declare)/s";
Regex reg=new Regex(sqlString);
return reg.IsMatch(tempString);
}
{
string tempstring = inText;
tempstring = tempstring.Replace("'", "''");
return tempstring;
}
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1643722
- java(or jsp)防sql注入
- java(or jsp)防sql注入
- java(or jsp)防sql注入
- JSP防SQL注入攻击
- java 防sql注入
- JAVA防sql注入
- 简单防Get OR Post SQL注入
- Java如何防sql注入
- java防sql注入详解
- java 防SQL注入正则
- Java 防SQL注入方法
- jsp防sql脚本注入攻击
- 超强JSP防SQL注入攻击
- jsp的防sql注入通用程序
- 超强JSP防SQL注入攻击
- jsp sql 防注入方法解析
- 超强JSP防SQL注入攻击
- 通用防SQL注入函数java版
- Convert C# to VB.NET - A free code conversion tool
- 部署C#应用程序
- php4和php5区别
- 感恩的心
- 易于数据库访问的ZK特性
- java(or jsp)防sql注入
- Windows XP自动登录的两种方法
- 应用程序池属性详解及配置
- 一种很酷的文字提示效果演示
- 求助:C#做的聊天软件,字体和截图功能实现了,可是传不过去
- Java虚拟机类装载:原理、实现与应用
- java面试试题整理
- 解决mysql5的乱码问题的心得
- php晋级之路–Life In Blogcn