一个防止SQL注入的函数

在网上搜索了半天,搜出来的代码不是检测到sql关键字提示用户改就是直接替换SQL关键字,而且有很多代码还没有注意到关键字大小写问题。所以代码多少有写缺陷和不完美。

后来自己想到将所有代码编码成utf8或其他编码,现实的时候再解码,但是这样的处理量十分大。可用程度不高。后来忽然想到网页显示的时候常常将空格用“ ”代替。这样一来,本来一条正常的SQL语句“select ns_title from news”就变成“select ns_title from news”了,立马想到替换SQL语句中的分隔符不是比替换关键字有效得多吗?而且对显示没有影响。所以有了一下的一个简单的函数:

        private string SqlEncode(string str)//SQL语句过滤
        {
            str 
= str.Replace(" "," ");
            str 
= str.Replace("\t","<br />");
            str 
= str.Replace("\n","<br />");
            
//str = str.Replace(@"\",@"\\");
            str = str.Replace("'","''");
            
return str;
        }


暂时发现SQL语句的分隔符只有空格、\t、\n三个,如果发现更多,只要增加一个Replace语句就可用很好地工作了。当然用正则表达式替换更好,但是函数语句太简单了,相信效率相差不是很大。
但是为什么大伙都不用这个办法呢?没有想到吗?还是别的什么原因?呵呵,希望你知道告诉我!

posted @ 2006-09-04 14:19  KenBlove  阅读(802)  评论(2编辑  收藏  举报