学习笔记 – Jtro的技术分享:游戏服务器端防止Sql注入

所谓的sql注入,就是通过输入请求,把sql命令插入到sql语句中,已达到欺骗服务器的目的。
假设服务器端要获取玩家的数据,可能使用如下的sql语句

string sql = "select *from player where id = " + id ;

当然,在正常情况下该语句能够完成读取数据的工作,但如果一名玩家恶意注册了类似的

"xiaoming;delete *form player"

这样的名称,这条sql语句将会变成下面两条语句。

select *from player where id = xiaoming ;delete *form player ;

执行了这样的语句之后,player表中的数据将会全部清空,后果不堪设想。如果把含有逗号、分号等特殊字符判定为不安全字符,在拼装sql语句前进行安全检测,就可以有效的防止sql注入
代码如下:

//判定安全字符
public bool IsSafeStr (string str)
{
return !Regex.IsMatch (str ,@"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
}

正文完