APP NEWS

初学ASP编程易犯的一个错误要注意

在ASP编程中,身份认证可以说是常要用到的。但怎么样才能做到认证的安全呢?   表单提交页面:sub.htm<html>   <head>   <title>管理员登陆</title>   <body>&

2015-06-28 00:001 次阅读
初学ASP编程易犯的一个错误要注意

在ASP编程中,身份认证可以说是常要用到的。但怎么样才能做到认证的安全呢?

    表单提交页面:sub.htm

   
    管理员登陆</title> <br>    <body> <br>    <form name=&form1& method=&post& action=&sub.asp&> <br>    <p> 管理员: <br>    <input type=&text& name=&UserID& size=&25& maxlength=&20&><br>    密 码: <br>    <input type=&text& name=&Pass& size=&12& maxlength=&20&> <br>    <input type=&submit& name=&Submit& value=&提交&> <br>    </p> <br>    </form> <br>    </body> <br>    </html> <br> </p> <p>    SUB.asp程序 <br>    <% <br>    接收表单中的数据 <br>    user=request.from(&UserID&) <br>    检察表单提交的数据是否为空(表单页面可能你用javaSCRIPT OR vbSCRIPT控制了,但这里也不要忘记控制! <br>    if user=&& then <br>    转到出错提示页面! <br>    response.redirect &err1.htm& <br>    这一句可能没用,但加上为好! <br>    response.end <br>    end if <br>    pass=request.from(&Pass&) <br>    if pass=&& then <br>    response.redirect &err2.htm& <br>    response.end <br>    end if <br>    联接数据库 <br>    file=server.mappath(&你的数据库&) <br>    set conn=server.createobject(&adodb.connection&) <br>    dr=&driver={microsoft access driver (*.mdb)};dbq=&&file <br>    conn.open dr <br>    set rs=server.createobject(&adodb.recordset&) <br>    关键是这里的SQL语言 <br>    sql=&select * from 表 where user= &&user&& and pass= &&pass&& & <br>    rs.open sql <br>    if not rs.eof then <br>    找到的话就进入管理页面 <br>    reponse.redirect &login.asp& <br>    else <br>    没找到就进入错误页面 <br>    response.write &err3.htm& <br>    end if <br>    %> <br> </p> <p>    大家感觉以上代码应该没问题啊,但是这里有一个严重的安全隐患:</p> <p>    我如果想登录管理员的话可以在SUb.htm表单输入框中输入: </p> <p>    第一个文本框中输入:a or 1 = 1 或 OR = </p> <p>    第二个文本框中输入:a or 1 = 1 或 OR = </p> <p>    提交,大家会看到...&呜,听我说完好不好,砖头一会再丢过来...& </p> <p>    &a & 和&1&为任意字符 </p> <p>    有人会问为什么你输入这些字符会以管理员身份进入呢?? </p> <p>    其实这些字符是对你程序中SQL语言的欺骗,而成功进入的 </p> <p>    大家看:开始程序SQL中是对表进行查询满足user= &&user&& and pass= &&pass&& &条件的记录 </p> <p>    sql=&select * from 表 where user= &&user&& and pass= &&pass&& & </p> <p>    我而输入上面的代码后就成了: </p> <p>    sql=&select * from 表 where user= a or 1 = 1 and pass= a or 1 = 1 & </p> <p>    大家看看,能有不进入的理由吗??给我一个不进入的理由,先! </p> <p>    以上USER PASS字段为字符型 如果是数字型也一样的道理!</p> <p>    解决方法: </p> <p>    一、函数替代法: </p> <p>    用REPLACE将用户端输入的内容中含有特殊字符进行替换,达到控制目的啊!sql=&select * from 表 where user= &&replace(user,& &,& &)&& and pass= &&replace(pass,& &,& &)&& & </p> <p>    这种方法每次只能替换一个字符,其实危险的字符不只是& &,还有如&>&、&<&、&&&、&%&等字符应该全控制起来。但用REPLACE函数好象不太胜任那怎么办呢?? </p> <p>    二、程序控制法 </p> <p>    用程序来对客户端输入的内容全部控制起来,这样能全面控制用户端输入的任何可能的危险字符或代码,我就的这个方法!<br><% <br>    捕捉用户端提交的表单内容 <br>    user=request.from(&user&) <br>    pass=request.from(&pass&) <br>    ... <br>    循环控制开始 <br>    for i=1 to len(user) <br>    用MID函数读出变量user中i 位置的一个字符 <br>    us=mid(user,i,1) <br>    将读出的字符进行比较 <br>    if us=& & or us=&%& or us=&<& or us=&>& or us=&&& then <br>    如果含有以上字符将出错提示,不能含有以上特殊字符 <br>    response.redirect &err2.htm& <br>    response.end <br>    end if <br>    next <br>    ... <br>    %> </p> <p>关键词标签:错误,注意,一个,编程</p> </div><section class="related-news"><h2>更多资讯</h2><a href="/news/itmop-news-52757"><span>08-04</span><strong>一点资讯手机版设置查看添加到黑名单的用户信息的方法</strong><svg><use href="#icon-arrow"/></svg></a><a href="/news/itmop-news-52756"><span>08-04</span><strong>一点资讯手机版设置应用登录密码的方法</strong><svg><use href="#icon-arrow"/></svg></a><a href="/news/itmop-news-52755"><span>08-04</span><strong>一点资讯手机版设置一键更换手机号的方法</strong><svg><use href="#icon-arrow"/></svg></a><a href="/news/itmop-news-52754"><span>08-04</span><strong>ZAKER手机版设置启用获取粗略位置信息的方法</strong><svg><use href="#icon-arrow"/></svg></a></section></article> </main> <section class="global-app-recommend"><div class="page-width"><header><div><span>YOU MAY ALSO LIKE</span><h2>更多应用推荐</h2></div><a href="/apps">浏览应用库 <svg><use href="#icon-arrow"/></svg></a></header><div class="global-app-track"> <a href="/app/itmop-156170"><img src="https://img.itmop.com/upload/2017-4/20174181135514803.png" alt="碧蓝航线ios版" loading="lazy"><span><strong>碧蓝航线ios版</strong><small>iOS · v7.1.8 iphone版</small></span><svg><use href="#icon-arrow"/></svg></a><a href="/app/itmop-545596"><img src="https://img.itmop.com/upload/2023-7/20237251613287635.jpg" alt="爱航阅读" loading="lazy"><span><strong>爱航阅读</strong><small>Android · v1.6.0.07210118_release_arm64-8a_hw _release 官方安卓版本</small></span><svg><use href="#icon-arrow"/></svg></a><a href="/app/itmop-224992"><img src="https://img.itmop.com/upload/2017-11/20171123112889027.png" alt="约翰尼勃纳瑟拉的复仇(johnny bonasera1)" loading="lazy"><span><strong>约翰尼勃纳瑟拉的复仇(johnny bonasera1)</strong><small>Android · v1.26 安卓中文版_附攻略</small></span><svg><use href="#icon-arrow"/></svg></a><a href="/app/itmop-20370"><img src="https://img.itmop.com/upload/2026/06-02/4015874d2d43d9ec9b89294a3ab168e2.png" alt="亲宝宝软件最新版" loading="lazy"><span><strong>亲宝宝软件最新版</strong><small>Android · v11.14.5 安卓版</small></span><svg><use href="#icon-arrow"/></svg></a><a href="/app/itmop-168152"><img src="https://img.itmop.com/upload/2026/07-24/dfeb962a03b6459dda907bcf286c8475.png" alt="小黑课堂网校app" loading="lazy"><span><strong>小黑课堂网校app</strong><small>Android · v2.4.8 安卓版</small></span><svg><use href="#icon-arrow"/></svg></a><a href="/app/itmop-61720"><img src="https://img.itmop.com/upload/2016-7/20167281629248053.png" alt="全民斗战神手游" loading="lazy"><span><strong>全民斗战神手游</strong><small>Android · v4.0.34 安卓版</small></span><svg><use href="#icon-arrow"/></svg></a></div></div></section> <footer class="site-footer"><div><strong>拾光应用</strong><span>应用信息经过整理,下载请优先选择开发者官方渠道。</span><a href="/sitemap">网站地图</a></div></footer> <nav class="mobile-nav" aria-label="移动导航"><a href="/">推荐</a><a href="/apps">分类</a><a href="/latest">最新</a><a href="/rankings">排行</a><a href="/news">资讯</a></nav> <script src="/static/js/site.js?v=6"></script> </body></html>