防止SQL注入

本文介绍.NET环境下三种防止SQL注入的方法:使用SqlParameter传递参数、过滤非法SQL关键字和使用存储过程;并提供JavaScript版本的SQL注入防护代码。

.NET防SQL注入方法


1,利用SqlCommand传参数的方法:

string strSQL="SELECT * FROM [user] WHERE user_id=@id";

SqlCommand cmd = new SqlCommand();

cmd.CommandText = strSQL;

cmd.Parameters.Add("@id",SqlDbType.VarChar,20).Value=Request["id"].ToString();

2,过滤禁止运行法:

/// <summary>

/// 过滤SQL语句,防止注入

/// </summary>

/// <param name="strSql"></param>

/// <returns>0 - 没有注入, 1 - 有注入 </returns>

public int filterSql(string sSql)

{

int srcLen, decLen = 0;

sSql = sSql.ToLower().Trim();

srcLen = sSql.Length;

sSql = sSql.Replace("exec", "");

sSql = sSql.Replace("delete", "");

sSql = sSql.Replace("master", "");

sSql = sSql.Replace("truncate", "");

sSql = sSql.Replace("declare", "");

sSql = sSql.Replace("create", "");

sSql = sSql.Replace("xp_", "no");

decLen = sSql.Length;

if (srcLen == decLen) return 0; else return 1;        

}

//sql过滤关键字   
public static bool CheckKeyWord(string sWord)
    {
       //过滤关键字
        string StrKeyWord = @"select|insert|delete|from|count\(|drop table|update|truncate|asc\(|mid\(|char\(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and";
     //过滤关键字符
     string StrRegex = @"[-|;|,|/|\(|\)|\[|\]|}|{|%|\@|*|!|']";
        if (Regex.IsMatch(sWord, StrKeyWord, RegexOptions.IgnoreCase) || Regex.IsMatch(sWord, StrRegex))
            return true;
        return false;
    }

3,存储过程


js版的防范SQL注入式攻击代码:

<script language="javascript">

<!--

var url = location.search;

var re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table|update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master|net%20localgroup%20administrators|\"|:|net%20user|\|%20or%20)(.*)$/gi;

var e = re.test(url);

if(e) {

alert("地址中含有非法字符~");

location.href="error.asp";

}

//-->

<script>

http://www.cnblogs.com/fumj/p/3223320.html

http://www.cnblogs.com/xiepeixing/archive/2012/11/13/2767733.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值