这样的源代码有注入的可能吗

ask101a 2014-05-24 10:13:32
sql = "select Id,title from Texts where Title like '%{0}%'";
sql = string.Format(sql, keyword.Replace("'", "")); //<-- 把'都过滤掉
DataTable dt = DB.GetTable(sql);

也就是说,在执行sql之前把'都过滤掉了,本身在一个like '% {0} %'里
...全文
593 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
smthgdin_020 2014-05-26
  • 打赏
  • 举报
回复
放注入就是要参数化查询条件,避免拼接sql。
MR00009 2014-05-26
  • 打赏
  • 举报
回复
也是啊,怎么能连个单引号都不能搜索。
lxhlizhenhao 2014-05-26
  • 打赏
  • 举报
回复
这个,的确有注入的可能,原因,上面都已经说了
天空丶蒋 2014-05-25
  • 打赏
  • 举报
回复
唉,残留的坑,我们这些人还不得不往下跳。
  • 打赏
  • 举报
回复
说白了就是,Replace("'","''") 是出自 SQL Server 语法手册上的规范代码,就应该这样写且不会出任何纰漏。而你非要改成了 Replace("'",""),这不是多此一举嘛。
  • 打赏
  • 举报
回复
这一段程序,就应该有它自己的测试。无需假设“数据库中的确没有包含单引号”。为了测试这段代码是否正确,测试人员本来就应该“造出”一条有单引号的数据来。 实际上,这里的测试“单引号也能查询出来”目的就是用来解决你的“有注入的可能吗?”这个问题的。只是你还是听不进而已。
  • 打赏
  • 举报
回复
引用 17 楼 ask101a 的回复:
不是我听不进去,而是领导愿不愿意 而且从业务来说,数据中的确没有包含单引号,也就是系统不需要进行这个用例的必要 历史原因,大量这样的代码,如果没有安全问题,很难付出这种人力成本去改 我主要想学习,这种写法是否有危险
“系统不需要进行这个用例的必要”? 只有根本检查不出来任何BUG的用例才没有必要写。哪有说可以检出问题的用例是”没必要的“呢? 很难说你们的编程(或者小一点范围,你和你的领导)是基于实践的。比如说你说“因为没有单引号,所以没有必要写针对它的测试”,那么你有什么必要写出这个 Replace("'","'') 代码来呢?这类自相矛盾、总也在纠结是非的事情你们干了很多次吧?
tcmakebest 2014-05-24
  • 打赏
  • 举报
回复
引用 10 楼 ask101a 的回复:
[quote=引用 8 楼 tcmakebest 的回复:] 防止注入,用个参数用行了,何须讨论半天? 但还是回答一下吧,只要把单引号成双就可以了,这样单引号仍然可以被搜索。
已有的系统,大量这样的,必须举出反例才能劝说改动 [/quote] 目前来看是可以防注入的吧,曾经也是这么走过来的,但可能存在不确定因素。
ask101a 2014-05-24
  • 打赏
  • 举报
回复
引用 10 楼 ask101a 的回复:
[quote=引用 8 楼 tcmakebest 的回复:] 防止注入,用个参数用行了,何须讨论半天? 但还是回答一下吧,只要把单引号成双就可以了,这样单引号仍然可以被搜索。
已有的系统,大量这样的,必须举出反例才能劝说改动 [/quote] 另外我的意思不是搜索引号,而是有没有注入的风险,谢谢了
ask101a 2014-05-24
  • 打赏
  • 举报
回复
引用 8 楼 tcmakebest 的回复:
防止注入,用个参数用行了,何须讨论半天? 但还是回答一下吧,只要把单引号成双就可以了,这样单引号仍然可以被搜索。
已有的系统,大量这样的,必须举出反例才能劝说改动
缪军 2014-05-24
  • 打赏
  • 举报
回复
参数化sql可以避免注入
sql = "select Id,title from Texts where Title like '%'+@Keyword+'%'";
然后改写你的GetTable()方法, 使之能够传入SqlParameter参数
tcmakebest 2014-05-24
  • 打赏
  • 举报
回复
防止注入,用个参数用行了,何须讨论半天? 但还是回答一下吧,只要把单引号成双就可以了,这样单引号仍然可以被搜索。
threenewbee 2014-05-24
  • 打赏
  • 举报
回复
http://security.stackexchange.com/questions/3611/sql-injection-but-why-isnt-escape-quotes-safe-anymore
Null_Reference 2014-05-24
  • 打赏
  • 举报
回复
keyword.Replace("'", "") 你要把所有的关键字过滤掉也可以。。。
Null_Reference 2014-05-24
  • 打赏
  • 举报
回复
keyword.Replace("'", "")
ask101a 2014-05-24
  • 打赏
  • 举报
回复
引用 1 楼 winner2050 的回复:
用16进制的代码粘贴到输入框,轻而易举破解过滤法。 过滤毫无用处,是最容易被破解的了。。
16进制的代码? 您是指这样的吗? CAST(0x7400610062006C0065003100 AS NVARCHAR(4000)) 但是这个会被包含在' '里,不予执行啊
ask101a 2014-05-24
  • 打赏
  • 举报
回复
引用 2 楼 bdmh 的回复:
没意义,终究还是一个字符串拼接
虽然是字符串拼接,但是能举出1个例子吗,无论什么字符串不都是会被包含在' ' 里吗?谢谢
bdmh 2014-05-24
  • 打赏
  • 举报
回复
没意义,终究还是一个字符串拼接
winner2050 2014-05-24
  • 打赏
  • 举报
回复
用16进制的代码粘贴到输入框,轻而易举破解过滤法。 过滤毫无用处,是最容易被破解的了。。
ask101a 2014-05-24
  • 打赏
  • 举报
回复
引用 15 楼 sp1234 的回复:
[quote=引用 10 楼 ask101a 的回复:] [quote=引用 8 楼 tcmakebest 的回复:] 防止注入,用个参数用行了,何须讨论半天? 但还是回答一下吧,只要把单引号成双就可以了,这样单引号仍然可以被搜索。
已有的系统,大量这样的,必须举出反例才能劝说改动 [/quote] 人家说“单引号仍然可以被搜索”就是一个测试用例,只是你根本没听进去啦。[/quote] 不是我听不进去,而是领导愿不愿意 而且从业务来说,数据中的确没有包含单引号,也就是系统不需要进行这个用例的必要 历史原因,大量这样的代码,如果没有安全问题,很难付出这种人力成本去改 我主要想学习,这种写法是否有危险
加载更多回复(4)

62,046

社区成员

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

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

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

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