日期:2014-05-18  浏览次数:20317 次

|M| 学了几天的存储过程最后发现竟然没有什么用 晕
本来我想用存储过程来做查询的
但最好发现在存储过程中拼合查询语句也没有办法防止用户输入如
‘这样的字符出错


顺便问一下,如何能够不用转掉用户的输入如 '   -->   ' '
而SQL能够正常查询呢
注:这里主要用来做查询的
可以查我的贴 %|M|%存储过程%

谢谢

------解决方案--------------------
这么晚 8J该抢不到沙发了..
------解决方案--------------------
哈,高歌~

不知道 LZ 怎么拼的SQL,
只有使用参数,才可以不用手动转化,防止sql 注入
------解决方案--------------------
听得一头雾水
------解决方案--------------------
路过
------解决方案--------------------
用正则来过滤用户输入
------解决方案--------------------
走了
------解决方案--------------------
各有各用处!
------解决方案--------------------
听得一头雾水
------解决方案--------------------
先收藏,顺便接分
再留个msn:mingyeh1979@hotmail.com
以后多多交流
------解决方案--------------------
使用sql转义
------解决方案--------------------
最大的好处 就是防注入。。~
------解决方案--------------------
存储过程可以减少网络流量,提高性能
------解决方案--------------------
amandag(高歌)
Jinglecat(晓风残月)
zyciis287()
你们几位都不睡觉的吗?
------解决方案--------------------
。。。啊,谁说存储过程没用的,我跟谁急~
------解决方案--------------------
楼主,是你的查询语句有问题吧
------解决方案--------------------
本来用存储过程的好处之一就是防止用户sql注入,结果lz还是用拼字符串的方法写存储过程。
本人不会存储过程,但是绝对知道这个很有用。
------解决方案--------------------
程序问题吧!
------解决方案--------------------
对于 直接的 传递字符 存储过程的 调用 是可以 有效的防止 ' 这样的注入的.

ado.net在处理的时候 实际会替换成 ' '

但是 对于拼接的字符串

楼主还是需要 自己 替换
比如使用 下面的函数
/// <summary>
/// 过滤html
/// </summary>
/// <param name= "text "> </param>
/// <returns> </returns>
public static string FilterSQL(string text)
{
string validSql = " ";
if (text != null)
{
text = text.Replace( "\ " ", "&quot; ");
text = text.Replace( "; ", " ");
//text = text.Replace( " ' ", " ' ' ");
// text = text.Replace( "-- ", " ' '-- ' ' ");
text = text.Replace( "%25 ", " ");
text = text.Replace( "%0a ", " ");
text = text.Replace( "%22 ", " ");
text = text.Replace( "%27 ", " ");
text = text.Replace( "%5c ", " ");
text = text.Replace( "%2f ", " ");
text = text.Replace( "%3c ", " ");
text = text.Replace( "%3e ", " ");
text = text.Replace( "%26 ", " ");

text = text.Replace( " < ", "&lt; ");