如果存储过程是拼的SQL,那么要防止注入,怎么办?

zrflkwow 2009-10-13 09:00:03
是不是只能在执行存储过程之前替换掉敏感字符了?
...全文
150 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
小伙写代码 2009-10-13
  • 打赏
  • 举报
回复

str = str.Replace(";","").Replace("*","").Replace("'","").Replace("&","").Replace(" ","").Replace("%20","").Replace("--","").Replace("==","").Replace("<","").Replace(">","").Replace("%","").Replace("nchar","").Replace("select","").Replace("update","").Replace("insert","").Replace("create","").Replace("drop","").Replace("delete","");

SK_Aqi 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zrflkwow 的回复:]
引用 11 楼 sk_aqi 的回复:
应该替换很多,例如上面的
可我只要不输入单引号,输入其他任何关键字都不会出错啊。。。
[/Quote]
出错?怎么才能出错呢,就是人家比如在浏览器上注入的时候报错呢
不是单指说我在文本框中输入',select,drop不报错就ok了
zrflkwow 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sk_aqi 的回复:]
应该替换很多,例如上面的
[/Quote]

可我只要不输入单引号,输入其他任何关键字都不会出错啊。。。
SK_Aqi 2009-10-13
  • 打赏
  • 举报
回复
应该替换很多,例如上面的
zrflkwow 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chen_ya_ping 的回复:]
过滤了关键字以后,还可以建立一个DDL得触发器,这样的话对表或数据库的危险的操作都可以不让执行
[/Quote]

这里的触发器干嘛用的。。?谢谢
zrflkwow 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zzxap 的回复:]
replace一下单引号就行了
[/Quote]

哈哈。

我一直都是只替换单引号,也没有出过错,但是看到很多大侠都要替换掉很多敏感字符,搞的我有点儿不自信~~~~~~~

当真只替换单引号就OK了啊~?呵呵
chen_ya_ping 2009-10-13
  • 打赏
  • 举报
回复
过滤了关键字以后,还可以建立一个DDL得触发器,这样的话对表或数据库的危险的操作都可以不让执行
zzxap 2009-10-13
  • 打赏
  • 举报
回复
replace一下单引号就行了
zrflkwow 2009-10-13
  • 打赏
  • 举报
回复
感谢几位。人工顶一下。
wxhysoftsodc 2009-10-13
  • 打赏
  • 举报
回复
支持通用解决方案
f231358 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zrflkwow 的回复:]
引用 1 楼 randomfeel 的回复:
应该是的,可以用正则去替换


得寸进尺的问下,除了替换单引号,还需要替换哪些呢?谢谢~
[/Quote]

很多啊 比如关键字"detele","update","insert"
之类的
hhh871030 2009-10-13
  • 打赏
  • 举报
回复

我自己一直是这么写的,希望对你有启发
#region 过滤字符
/// <summary>
/// 具体情况来定要过滤的字符
/// </summary>
/// <param name="param">要过滤的字符</param>
public static string CheckSaftParam(string param)
{

param = param.Replace("net user", "");
param = param.Replace("xp_cmdshell", "");
param = param.Replace("/add", "");
param = param.Replace("exec%20master.dbo.xp_cmdshell", "");
param = param.Replace("net localgroup administrators", "");
param = param.Replace("select", "");
param = param.Replace("'", "''");
param = param.Replace("insert", "");
param = param.Replace("delete", "");
param = param.Replace("drop", "");
param = param.Replace("truncate", "");
param = param.Replace("from", "");
param = param.Replace("%", "");
param = param.Replace("%20", "");

return param;
}
#endregion

zrflkwow 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 randomfeel 的回复:]
应该是的,可以用正则去替换
[/Quote]

得寸进尺的问下,除了替换单引号,还需要替换哪些呢?谢谢~
randomfeel 2009-10-13
  • 打赏
  • 举报
回复
应该是的,可以用正则去替换

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧