服务器 频道

浅谈SQL注入式(SQL injection)攻击与防范

  【IT168 服务器学院】1、bak文件泄漏asp源代码
  
很多编辑工具,如Editplus、UltraEdit,默认情况下在保存文件的时候,都会自动备份一个.bak文件。如创建或者编辑config.asp文件,则编辑器会自动生成一个config.asp.bak文件,如果没有删除该文件,攻击者可以通过http://www.***.com/config.asp.bak来下载asp源程序。
  可以想象,你的源程序被下载,被攻击的风险无疑大了很多。而如果是配置文件,呵呵,用户名、密码、数据库名称/位置……
  解决办法:要么就直接关闭编辑器的自动备份功能,要么在上传的时候,删除所有.bak文件。
  
  2、身份验证被绕过
  一般网站有很多页面是需要身份验证通过以后才能访问的,而在这些页面需要对用户身份再次进行验证,但是很多程序员往往忽略了这一点。如果攻击者知道了这些页面的路径和文件名,就可以绕过身份验证,直接进入到该页面。如:需要用户通过login.asp页面登陆,经过身份验证才能打开manage.asp页面。攻击者可以通过http://www.***.com/manage.asp直接进入管理界面。
  解决办法:在这些的页面开头进行身份确认。如:在身份验证通过以后传递一个session("login")="ok",在manage.asp开头加入
  以下内容为程序代码:
  
  if session("login")<>"ok" then
  response.redirect "login.asp"
  end if
  
  
  上面2点说的都是编程的基础问题,下面就来讨论本文的重点,关于sql注入式攻击与防范。
  
  3、asp程序数据库密码验证漏洞
  首先,关于request对象,我们知道,如果在form表单中使用get方法传递数据时,应该用QueryString集合来检索表单数据;而使用post方法传递数据时,应该用Form集合来检索表单数据。而更多的程序员为了方便,直接省略集合名称,使用request("data")来检索数据,看似简单,实际上效率很低,而且容易出错。asp默认搜索集合的顺序是QueryString、Form、Cookie、Serverariable,当发现第一个匹配的变量时,就认定是你要访问的成员。所以建议大家不要采用这种方法,题外话说完,我们转入正题。
  先来看login.asp文件
  以下内容为程序代码:
  
  ……
  <form action="verify.asp" method="post" name="login">
  用户名<input type=text name=name value="" maxlength="20">
  密码<input type=password name=pwd value="" maxlength="20">
  <input type=submit name=bt value="确认">
  <input type=reset name=bt value="重置">
  </form>
  ……
  再来看verify.asp文件
  以下内容为程序代码:
  ……
  dim rs,sql
  dim name,pwd
  name=request.form("name")
  pwd=request.form("pwd")
  
  if name="" or pwd="" then
  response.redirect "login.asp"
  end if
  ……
  ''关于身份验证
  sql="select * from user where name=''"&name&"'' and pwd=''"&pwd&"''"
  ……
  
0
相关文章