SQL注入

ledy 2004-12-28 05:28:04
ASP+SQL Server数据库
做到以下两点,是不是可以杜绝SQL注入?
1.尽量使用ADO的Command对象,通过传递参数来操作数据库。
2.禁止通过字符串相加的方法来构造SQL。
...全文
213 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mikespook 2004-12-30
  • 打赏
  • 举报
回复
一般我会将一些不好过滤的内容写成存储过程查询~~~
同时在数据库连接的用户那里设置访问权限,比如禁用DROP ALTER CREATE,以及XP_的一些存储过程~~~
这样即使疏忽写了一些有危险的代码造成注入,结果也不会造成太大的危害~~
xhlin 2004-12-30
  • 打赏
  • 举报
回复
学习,谢谢Newrocky(罗罗)的讲解,又长见识了阿,不过懒得改了,反正我主要做的是后台代码,数据库表到时候给日本人,他们自己还有人管理的八:)不偷懒白不偷懒阿
rheleven 2004-12-29
  • 打赏
  • 举报
回复
存储过程
qfacy 2004-12-29
  • 打赏
  • 举报
回复
学习
ledy 2004-12-29
  • 打赏
  • 举报
回复
to Newrocky(罗罗):
谢谢。那怎样才是最好的办法?
Newrocky 2004-12-29
  • 打赏
  • 举报
回复
因此,楼主的办法,其实也存在问题的
1 使用COMMAND
这是一样的啊,你的COMMAND也是要执行SQL语句嘛!问题不在使用什么对象上,而是SQL语句!
2 不使用连接字符串
恩,那是可以让你的SQL语句保证良好,可是,不能连接字符串如何可以获取用户提交的信息呢?
几乎不可能,当然也存在可能的,就是通过程序去判断用户的提交值,可惜,这样做的话,程序的效率就大大出问题了!!!
比如:
<%
'http://www.xx.com/xx.asp?id=1
sql="select * from table"
do while not rs.eof
if rs("id")=request.querystring("id") then
‘执行操作
exit do
else
rs.movenext
end if
loop
%>
Newrocky 2004-12-29
  • 打赏
  • 举报
回复
xhlin(HeaD) ( ) 信誉:100 2004-12-29 09:10:00 得分: 0


那位高手说明一下SQL注入什么意思啊,我数据库用sa做账户怎么了阿?我的密码改了不就可以了吗

请指点



SQL注入指的是通过畸形的SQL语句,对数据库进行操作

比如http://www.ss.com/xx.asp?id=1
这是一个查看1号记录的ASP典型语法
<%
sql="select * from table where id = " & request.querystring("id")
'response.write sql
'select * from table where id = 1
rs.open sql,conn,1,1
%>

注意,这样就会被注入了!为什么呢?
http://www.ss.com/xx.asp?id=;declare @a varchar(200);set @a ='drop TABLE '+(SELECT top 1 name FROM sysobjects WHERE (xtype = 'U'));exec(@a);--

看,就这样,ASP里就变成了!

<%
sql="select * from table where id = " & request.querystring("id")
'response.write sql
'select * from table where id = ;declare @a varchar(200);set @a ='drop TABLE '+(SELECT top 1 name FROM sysobjects WHERE (xtype = 'U'));exec(@a);--
rs.open sql,conn,1,1
%>

这以为着什么呢?
呵呵,别人可以通过你的SQL语句和SA权限对你的机器做任何事了,SQL是很强大的,甚至可以建立用户!改变权限!

所以,对SQL注入必须处理!并且为了服务器的安全,web网站最好不要用SA来访问数据库,专门建立一个用户比较好!
xhlin 2004-12-29
  • 打赏
  • 举报
回复
那位高手说明一下SQL注入什么意思啊,我数据库用sa做账户怎么了阿?我的密码改了不就可以了吗

请指点
deerchao 2004-12-28
  • 打赏
  • 举报
回复
一定要判断返回参数的类型
一定不要用sa做web数据账户
要检查单引号,英文括号,分号。

如此,则绝大部分的SQL注入可堵住了。
yqh1314 2004-12-28
  • 打赏
  • 举报
回复
看不懂!!!!!!!!!!!!!! 但是应该可以去想想`` 谁叫我学的是``` 文本数据库呢对SQL 不怎么了解!
iuhxq 2004-12-28
  • 打赏
  • 举报
回复
xtype = 'U'是什么意思?
超级大笨狼 2004-12-28
  • 打赏
  • 举报
回复
凶猛的注入:删除表

;declare @a varchar(200);set @a ='drop TABLE '+(SELECT top 1 name FROM sysobjects WHERE (xtype = 'U'));exec(@a);--
超级大笨狼 2004-12-28
  • 打赏
  • 举报
回复
yes!!
xczhouyang 2004-12-28
  • 打赏
  • 举报
回复
传递参数做好就可以了
TSD 2004-12-28
  • 打赏
  • 举报
回复
不一定的了
yjb136 2004-12-28
  • 打赏
  • 举报
回复
世界上没有绝对的事,


不能做到的事,
以后会慢慢实现

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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