所谓sql注入,就是通过输入请求,把sql命令插入到sql语句中,以达到欺骗服务器执行恶意sql命令的目的。假设服务端要获取玩家数据,可能使用如下的sql语句。
string sql="select *from player where id="+id;
正常情况下该语句能够完成读取数据的工作。但如果一名恶意玩家注册了类似"haomei";delete *from player;"的名字,这条sql语句将变成下面两条语句。
select *from player where id = haomei;delete *from player;
执行这样的sql语句后,player表里面的数据都被删除了,后果不堪设想。如果把含有分号,逗号等特殊字符的字符串判断为不安全字符串,在拼装sql语句前,对用户输入的字符串进行安全性检查,就可以有效防止sql注入。使用正则表达式编写判定安全字符串的方法IsSafeStr,它将把含有 “ -;,\/()[]}{%@*!' ”这些特殊符号的字符串判定为不安全字符串,代码如下:
//判定不安全字符串
public bool IsSafeStr(string str)
{
return !Regex.IsMatch(str,@"[-|;|,|\/|\(|\)|\[|\]|\{|%|@|\*|!|']");
}