当前位置: 首页 > 图文教程 > 网络编程 > ASP > 在ASP程序中执行SQL语句的安全性问题

ASP
javascript asp教程More About Recordsets
javascript asp教程添加和修改
javascript asp教程 日期相关
简单的ASP分页代码(测试正确)
用ASP打开远端MDB文件的方法
asp下同一空间多绑多哥域名的方法
asp下实现替换远程文件为本地文件并保存远程文件的代码
asp,VBscript语法错误,史上最全最详细最精确
讲解ASP方面的知识比较全的asp学习教程
给万博系统的新闻系统增加分页功能[配有详细说明]
在asp中通过vbs类实现rsa加密与解密的代码
一段在asp中加密与解密对应的函数
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
用ASP VBS xmlhttp adodbstream下载和保存图片的代码
厉害的用Asp获取Dll加密新闻内容
用正则和xmlHttp实现的asp小偷程序
ASP之简化创建关闭记录集对象并创建使用简单的MSSQL存储过程
ASP中怎么实现SQL数据库备份、恢复!
asp中实现随机分组程序的代码
asp之字符串操作函数

在ASP程序中执行SQL语句的安全性问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 175 ::
收藏到网摘: n/a

  在ASP程序中,如果我们的程序设计不当,就有可能面临数据库被别人控制的危险

以下是一个简单的用户更改密码的代码
---------------------
username=request("user_name")
pwd=request("pwd")
username=replace(username,"'","''")
pwd=replace(pwd,"'","''")
sql="update tbl_test set pwd='" & pwd & "' where uid='" & username & "'"
set rs=conn.execute (sql)

--------------
现在,假如我注册一个用户,用户名为 aa'; exec sp_addlogin 'haha

当该用户更改密码时(假设改为pp),会出现什么后果呢??

sql变为 update tbl_test set pwd='pp' where uid='aa' ; exec sp_addlogin 'haha'

结果是用户密码没有被修改,因为没有 aa这个用户,
但在你的数据库中创建了一个登陆,新登陆名为 haha

将用户名稍加修改,实际上可以运行任何sql语句,任何sql系统过程
而这一切都在你不知情的情况下发生的,实际上,上面的只是一个

示范,稍微修改一下用户名,我们可以做添加一个DBA账号,删除所

有纪录,读取用户密码等越权操作。

 

 解决的办法:

在你使用参数前,对参数进行严格检验,尤其是用户输入的参数

不但要对其数据类型,长度进行检查,还要对其内容进行检查。


我们再看一段代码。(用户登陆)

username=request("user_name")
pwd=request("pwd")
username=replace(username,"'","''")
pwd=replace(pwd,"'","''")

sql="select uid,pwd from account where  uid='" & username & "'  and pwd='" & pwd "'"
rs.open sql,conn,1,1
if not rs.eof then
response.write  rs(0) & "欢迎您,您已登陆成功"
else
response.write  "登陆失败,错误的用户名或密码"
end if
............
以上程序的漏洞是显而易见的 
我们可以以          用户名:   admin       密码:   a' or '1'='1
轻易以admin的账号登陆系统
因为我们的sql 变为了
select uid,pwd from account where  uid='admin' and pwd='a' or '1'='1'
显然 uid='admin' and pwd='a' or '1'='1'是恒为成立的所以  rs.eof 为false

正确的写法应为
sql="select uid,pwd from account where  uid='" & username & "'  and pwd='" & pwd "'"
rs.open sql,conn,1,1
if rs(0)=username and rs(1)=pwd then
response.write  rs(0) & "欢迎您,您已登陆成功"
else
response.write  "登陆失败,错误的用户名或密码"
end if

 

----全文完--------