解读ASP程序执行SQL语句时防止注入攻击的问题(2)_ASP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:揭秘asp常用函数库大全
’-----------------FLYSOBlogASP站点开发常用函数库------------------ ’OpenDB(vdata_url)--------------------打开数据库 ’getIp()-------------------------------得到真实IP ’getIPAdress(sip)------------------------查找ip对应的真实地址 ’IP2Num


 

 解决的办法:

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

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


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

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

分享:详解将ASP页面改为伪静态的简单方法
目前很多网站都采用生成静态页的方法,原因是这样访问速度会得到提高(服务器端CPU利用率很低),另外也容易被搜索引擎收录,但是这带来的一个问题就是需要足够大的空间存放这些静态页面,如果你的空间不是很富裕,而又想有利于被搜索引擎收录,其实可以采用伪

共2页上一页12下一页
来源:模板无忧//所属分类:ASP教程/更新时间:2010-04-23
相关ASP教程