SQL语句直接拼接参数,SQL盲注问题请教!!!

qq_35935196 2016-08-22 03:41:56
因公司有许多多年前的小系统,当时开发并没有关注网站安全的问题(系统都是内部使用的),现在总部通过appscan扫描出了许多漏洞,其中就一大部分都是关于SQL盲注的,要求修复。
主要就是在拼接SQL语句时,没有使用参数化查询,而是直接采用语句拼接的方式:
string sql = "select * from table where id = '"+ID+"'";

和数据库的连接,执行语句肯定是有通用的类去执行,只是拼接时没采用参数化查询,现在要修复,肯定不可能一个一个页面去修改语句(工作量巨大),能否有别的方式实现(如写各类替换掉敏感字符?是否能实现拦截器拦截之类的)?
还望各位大神有经验分享指教下,谢谢了!
...全文
484 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35935196 2016-08-26
  • 打赏
  • 举报
回复
各位还有没好的方法呢
  • 打赏
  • 举报
回复
参数化传递,别直接拼接sql
还想懒够 2016-08-22
  • 打赏
  • 举报
回复
引用 9 楼 qq_35935196 的回复:
[quote=引用 8 楼 jjkk168 的回复:] [quote=引用 6 楼 qq_35935196 的回复:] [quote=引用 2 楼 starfd 的回复:] 随便找了个http://www.cnblogs.com/taizhouxiaoba/archive/2009/02/11/1388228.html
Global这种应该可以,我试试,谢谢[/quote] 过滤insert|select这些关键纯属扯蛋,也不知道是哪个半吊子水平的程序员写出一个这个鬼东西。 防SQL注入很简单,字符型的将单个单引号Replace成为两个单引号,其他类型的用TryParse分析一下(如int)就可以了[/quote] 请问下,这种我怎么在通用的数据库操作类里判断呢?如果直接在每个页面,不现实,工作量太大。[/quote] 如果是通用的执行类,你在获取到SQL语句后,用正则取出等于号和空格之间的值,如果有这样的条件,就再判断是否是利用单引号引起来的,如果再满足,直接将里面的值由单个单引号替换为两个单引号
qq_35935196 2016-08-22
  • 打赏
  • 举报
回复
引用 8 楼 jjkk168 的回复:
[quote=引用 6 楼 qq_35935196 的回复:] [quote=引用 2 楼 starfd 的回复:] 随便找了个http://www.cnblogs.com/taizhouxiaoba/archive/2009/02/11/1388228.html
Global这种应该可以,我试试,谢谢[/quote] 过滤insert|select这些关键纯属扯蛋,也不知道是哪个半吊子水平的程序员写出一个这个鬼东西。 防SQL注入很简单,字符型的将单个单引号Replace成为两个单引号,其他类型的用TryParse分析一下(如int)就可以了[/quote] 请问下,这种我怎么在通用的数据库操作类里判断呢?如果直接在每个页面,不现实,工作量太大。
还想懒够 2016-08-22
  • 打赏
  • 举报
回复
引用 6 楼 qq_35935196 的回复:
[quote=引用 2 楼 starfd 的回复:] 随便找了个http://www.cnblogs.com/taizhouxiaoba/archive/2009/02/11/1388228.html
Global这种应该可以,我试试,谢谢[/quote] 过滤insert|select这些关键纯属扯蛋,也不知道是哪个半吊子水平的程序员写出一个这个鬼东西。 防SQL注入很简单,字符型的将单个单引号Replace成为两个单引号,其他类型的用TryParse分析一下(如int)就可以了
qq_35935196 2016-08-22
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
[quote=引用 楼主 qq_35935196 的回复:] 因公司有许多多年前的小系统,当时开发并没有关注网站安全的问题(系统都是内部使用的),[/b]
说一个原则性认识:这根本不是安全问题。假设用户录入中有单引号,程序会不会崩溃? 这说明原来的程序根本就没有进行基本的测试。[/quote] 这个倒是有,比如在用户登录时,会判断是否含有敏感字符,有的话会提示。只是里面的一些功能,都是直接用SQL语句拼接,也没过滤掉敏感字符
qq_35935196 2016-08-22
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
随便找了个http://www.cnblogs.com/taizhouxiaoba/archive/2009/02/11/1388228.html
Global这种应该可以,我试试,谢谢
  • 打赏
  • 举报
回复
引用 楼主 qq_35935196 的回复:
因公司有许多多年前的小系统,当时开发并没有关注网站安全的问题(系统都是内部使用的),[/b]
说一个原则性认识:这根本不是安全问题。假设用户录入中有单引号,程序会不会崩溃? 这说明原来的程序根本就没有进行基本的测试。
  • 打赏
  • 举报
回复
具体的所谓“拦截”可能在更底层处理。总的来说,其实输入内容中的单引号处理为符合 t-sql 语法的单引号即可! 例如用输入的某个地址、文字介绍、外国人名、书名、密码等等信息中能不能用单引号? 当然必须支持单引号了。不然你们的系统又要崩溃了。
  • 打赏
  • 举报
回复
例如对于你贴出的相关代码的应用页面,只要拦截“Page_load”使得
ID = ID.Replace("'","''");
就行了。
  • 打赏
  • 举报
回复
对于这种,一般就是handler直接加sql参数过滤处理了

62,046

社区成员

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

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

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

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