关于BS架构系统,防止SQL注入攻击的思路

windindance 2009-10-14 07:10:52
加精
BS系统中,传统的注入攻击手段有很多。
最基本的,利用单引号攻击的,很容易解决,用类似于QuotedStr()(实际开发是其他语言,这里用DELPHI中的函数代替)的函数处理参数即可。
但实际应用中,不可避免会有一些应用需要直接传递参数,例如表名、查询条件、排序条件等等
对这些应用的注入攻击防不胜防。
我考虑了一个思路,供大家参考。

1 对所有网页传入的参数分三种。
a) 数字类型,用StrToInt函数处理。
b) 字符串类型,用QuotedStr函数处理。
c) 需要直接传递的参数,这是需要着重考虑的类型。

2 对所有数据库操作主要分五种,不允许程序直接执行SQL语句:
a) select 查询
b) update 更新
c) insert 新增
d) delete 删除
e) exec 执行存储过程

3 对于以上几种数据库操作的所有参数,例如select 操作中的 查询条件、排序条件等,都进行合法性校验:
a) 里面存在 "--" "/*" "*/" 的,都视为非法条件。
b) 将条件拆分为单词,如果存在以下单词:delete insert update exec execute create drop grant的,都视为非法条件。(正常的表名、字段名中不可能有上面这些关键字吧。)
c) 传入的查询条件,校验里面的括号,凡是右括号在左括号前面(不配对)的,都视为非法条件。
d) 传入的查询条件,前后加括号。

经过以上校验,应该基本可以保证参数是正常的参数,供大家参考。同时也希望大家能找出其中的漏洞,我可以进行改进^_^
...全文
4467 点赞 收藏 164
写回复
164 条回复
goto2020 2011年10月19日
學習一下
回复 点赞
txzsp 2010年11月08日
PreparedStatement是java的delphi就得自己干了。
回复 点赞
六六木木 2010年08月25日
学习技术!!
回复 点赞
xiaodao080320 2009年12月19日
不错
回复 点赞
修改一下昵称 2009年10月22日
好贴,顶一下
回复 点赞
随风落梦 2009年10月22日
的确,可以这样防止,学习了
回复 点赞
syuekj 2009年10月22日
辛苦了
回复 点赞
xiaowei_001 2009年10月22日
mark
有时间看
回复 点赞
junyi2003 2009年10月22日
关键是入口和出口预防。

中间层防致命性(崩溃性)错误。
回复 点赞
yct0605 2009年10月21日
UP,学习了。
回复 点赞
W9757 2009年10月21日
学习!
回复 点赞
jack_ailly 2009年10月21日
up
回复 点赞
Summue 2009年10月20日
谢谢,LZ!
回复 点赞
悲剧的人参 2009年10月20日
学习下
回复 点赞
chcn00 2009年10月20日
真好!学习,学习!
回复 点赞
wxhysoftsodc 2009年10月20日
关注 收藏
回复 点赞
hujiang123000 2009年10月20日
强啊
回复 点赞
binggirl 2009年10月20日
看的不是很懂
回复 点赞
sunjiakai 2009年10月20日
基本上可以避免。
回复 点赞
zhxc87 2009年10月20日
学习……
回复 点赞
发动态
发帖子
数据库相关
创建于2007-08-02

1209

社区成员

8.8w+

社区内容

Delphi 数据库相关
社区公告
暂无公告