虚位以待(AD)
虚位以待(AD)
首页 > 网络编程 > ASP编程 > 初学ASP编程编程易犯的一个错误要注意

初学ASP编程编程易犯的一个错误要注意
类别:ASP编程   作者:码皇   来源:互联网   点击:

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

在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>  密 码:</p><p>  <input type="text" name="Pass" size="12" maxlength="20"><br>  <input type="submit" name="Submit" value="提交"><br>  </p><br>  </form><br>  </body><br>  </html></p><p>  SUB.ASP编程程序</p><p>  <%</p><p>  接收表单中的数据</p><p>  user=request.from("UserID")</p><p>  检察表单提交的数据是否为空(表单页面可能你用JAVASCRIPT OR VBSCRIPT控制了,但这里也不要忘记控制!</p><p>  if user="" then<br>  转到出错提示页面!</p><p>  response.redirect "err1.htm"</p><p>  这一句可能没用,但加上为好!</p><p>  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</p><p>  联接数据库</p><p>  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")</p><p>关键是这里的SQL语言</p><p>  sql="select * from 表 where user= "&user&" and pass= "&pass&" "<br>  rs.open sql<br>  if not rs.eof then</p><p>  找到的话就进入管理页面</p><p>  reponse.redirect "login.ASP编程"<br>  else</p><p>  没找到就进入错误页面</p><p>  response.write "err3.htm"<br>  end if<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><br>  用REPLACE将用户端输入的内容中含有特殊字符进行替换,达到控制目的啊!sql="select * from 表 where user= "&replace(user," "," ")&" and pass= "&replace(pass," "," ")&" " </p><p>  这种技术每次只能替换一个字符,其实危险的字符不只是" ",还有如">"、"<"、"&"、"%"等字符应该全控制起来。但用REPLACE函数好象不太胜任那怎么办呢?? </p><p>  二、程序控制法 </p><p>  用程序来对客户端输入的内容全部控制起来,这样能全面控制用户端输入的任何可能的危险字符或代码,我就的这个技术!</p><p>  <%</p><p>  捕捉用户端提交的表单内容</p><p>  user=request.from("user")<br>  pass=request.from("pass")</p><p>  ...</p><p>  循环控制开始</p><p>  for i=1 to len(user)</p><p>  用MID函数读出变量user中i 位置的一个字符</p><p>  us=mid(user,i,1)</p><p>  将读出的字符进行比较</p><p>  if us=" " or us="%" or us="<" or us=">" or us="&" then</p><p>  如果含有以上字符将出错提示,不能含有以上特殊字符</p><p>  response.redirect "err2.htm"<br>  response.end<br>  end if<br></p><span class='DivH20'></span> <b>12下一页 </b> <span class='DivH5'></span> </div> <div id="pages" class="text-c"></div> <div class="rechiso"> <strong>相关热词搜索:</strong> 初学ASP编程编程易犯的一个错误要注意 </div> <div class="share_tool" style="padding-left:2px;padding-bottom:50px;"> <img src="http://www.ailab.cn/images/share1.gif" alt="人工智能实验室" /> <!-- JiaThis Button BEGIN --> <div id="jiathis_style_32x32"> <a class="jiathis_button_weixin"></a> <a class="jiathis_button_qzone"></a> <a class="jiathis_button_tsina"></a> <a class="jiathis_button_tqq"></a> <a class="jiathis_button_cqq"></a> <a class="jiathis_button_renren"></a> <a class="jiathis_button_kaixin001"></a> <a class="jiathis_button_googleplus"></a> <a class="jiathis_button_tieba"></a> <a class="jiathis_button_evernote"></a> <a class="jiathis_button_copy"></a> <a href="http://www.jiathis.com/share?uid=1981494" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a> </div> <script "text/javascript"> var jiathis_config = { appkey:{"tsina":"2586190969"} } </script> <script type="text/javascript" src="http://v3.jiathis.com/code/jia.js?uid=1394264618592156" charset="utf-8"></script> <!-- JiaThis Button END --> </div> <div class="bk6"></div> <div class="f14 lh26"> <strong>上一篇:</strong><a href="http://www.ailab.com.cn/article-1026-146762-1.html">关于ASP编程静态分页的反向生成方式</a><br /> <strong>下一篇:</strong><a href="http://www.ailab.com.cn/article-1026-146764-1.html">ASP编程达到SQL语句日期格式的加减运算</a> </div> <div class="bk15"></div> </div> </div> <div class="r column250"> <div class="ads310"> <img src="http://bbs.ailab.cn/data/attachment/common/cf/124640hs3cokmxa8zhoam9.gif" width="250" height="250"> </div> <div class="bk10"></div> <!--r end--> </div> </div> <div class="bk10"></div> <div style="display:none;"> <script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_3202821'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s19.cnzz.com/stat.php%3Fid%3D3202821' type='text/javascript'%3E%3C/script%3E"));</script> </div> <div class="footer"> <div class="foot_nav lh26">关于我们<span>|</span>联系我们<span>|</span>版权声明<span>|</span>友情链接<span>|</span>广告服务</div> <div class="foot_co lh20"> Copyright © 2020 <a href="http://www.ailab.cn/" target="_blank">人工智能实验室</a> 版权所有.<br />    </div> </div> <script type="text/javascript"> $(function(){ $(".picbig").each(function(i){ var cur = $(this).find('.img-wrap').eq(0); var w = cur.width(); var h = cur.height(); $(this).find('.img-wrap img').LoadImage(true, w, h,'http://www.ailab.com.cn/statics/images/s_nopic.gif'); }); }) </script><div class="bk"></div> <script language="JavaScript" src="http://www.ailab.com.cn/api.php?op=count&id=146763&modelid=1"></script> </div> </body> </html>