ASP程序漏洞补救方法两则

2014 年 12 月 19 日3510

  常见ASP程序的两大漏洞,相信大家已经很清楚它们的形成过程了,那么怎样有效地防治便成为"了我们行文的目的。

  易理解性、易测试性和易修改性是衡量一套软件程序可维护性的重要标志。ASP程序同样如此,要想防范ASP程序常见的这几种错误,首先在编写代码的时候就要注意以下两个方面:

  1、针对变量未过滤型漏洞

  尽量少地取用用户提交的变量数据。对每个带入SQL语句的变量。应该使用rep1ace函数剔除特殊字符,如下所示:

  replace(id"'","'")

  replace(id,";","''")

  replace(id,"(","''")

  这样就将变量id中的单引号(')分号(;)、注释符(--)、左括号 (()全部都替换成两个单引号 (")。而且这些替换与判断工作应尽量放在一起,靠近SQL语句,以方便以后的复查工作。特别注意的是,对于字段属性是数字的变量。我们最好还应该使用。cint()或IsNumeric()函数来判断Request得到的数据是否是整数型。如下所示:

  If ID<>""then ID =cint(ID)

  If isNumeric(ID)=0 Then ID=0

  如果编写的是留言本。或着是论坛的话。还应该考虑到用户发帖的长度,以及用户发帖的时间间隔等问题。

  2、针对逻辑错误漏洞

  构建良好的程序逻辑结构对于简单的新闻系统来讲,在管理员后台的编写时,所有文件推荐用《admin_"这种特定标记开头,这样方便以后的复查工作。然后专门写一个检查管理员登录的Session变量的文件Session.asp,除开admin_chklogin.asp管理员登录的登录页面,以及检查管理员账号密码,产生登录Session的admin)chklogin.asp以外,其他所有的后台文件都在第一行写入来检查管理员是否登录。

  其中,稍微要注意的是验证管理员账号密码,以及产生登录Session的admin_chklogin.asp文件的编写,有的时候管理员就是喜欢使用单引号等特殊字符来做密码,我们当然就不能将这些字符过滤了!而且,为了避免在虚拟机上让其他人有机可乘,Session信息也应该使用变量来设置。笔者的写法如下:

  suername=Request.Form("username")

  password=request.Form("password")

  if username=""or password=""then Response

  Redirect("admin_login.asp")

  set rs=conn.execute("SELECT top 1 Admin_name,

  Admin_password FROM Admin")

  Admin_name=rs("Admin_name")

  Admin_password=rs("Admin_password")

  if(username<>Admin_name)or(password<>

  Admin_password)then

  Response.Redirect"admin_login.asp"

  else

  Session("Admins")=Admin_name

  Response.Redirect"Admin_admin.asp"

  end if

  rs.close

  set rs=nothing

  这洋,通过精心的设计整个系统的权限认证过程,就能够基本上杜绝逻辑错误的产生。另外再提一点,不少人喜欢将Admin_login.asp管理员登录界面或管理界面删除或改名,以此防范非法用户登录,实际上这是种错误:第一,ASP程序本就是为了给用户提供方便的操作,不要给自已找麻烦;第二,删除或改名的应该是产生登录session的admin_chklogin.asp文件,不要自欺 欺人,只要能够得到判断管理员的登录信息(比如session或cookies),就可以直接POST数据给后台那些控制数据库操作的文件,登录界面或管理界面都只是摆设而已.

  以上都只是根据洞的形成原因,从编写代码的角度来看的。

0 0