ASP文件中的安全问题

浅谈ASP的安全问题
先说句牢骚话,我经常看到有人说ASP不安全,比如容易被注入,这种说法我一直感到无法理解。如果你水平不高,那么你用php用ASP.net用JSP都有被注入的可能,这关ASP什么事?ASP只是一种技术,用它开发的网站是否安全,只跟程序员和服务器管理员的水平有关系,任何技术开发的网站都一样。只要你的程序有漏洞,而且你用的数据库支持标准SQL语法,或者注入者会这种语法,那么就存在被注入的可能。
闲话少说,我今天结合我个人的经验来简单说说ASP中常见的安全问题。

一,注入。无论什么时候讲到网站的安全问题,SQL注入都是首当其冲的。我们先来看看SQL注入是怎么回事。简单的说,SQL注入就是通过各种方式传递非法的参数,其方式和目的无法是以下几种:
·期望程序出错,从而从服务器返回的错误信息中获得一些注入者想要的东西,这种方法常用来判断数据库的类型。
·执行特殊语句,用来猜解表名等。
·构造特殊语句,这个常常就是用来绕过登录检测取得管理权限的。
针对以上问题,我一般采用以下的应对方法:
·前面两种情况应该一起考虑。无论是哪种注入方式,其实都是通过构造非法的参数来实现的,那么我们就通过程序来限制参数,给合法的参数制定一个规则,不符合这个规则的就是非法的。但在检测时经常见出现下面的错误:
1,用isnumeric函数来检测id。这个函数仅仅是判断是否是数字,仅此而已,那么如果我这样输入一个url:shownews.asp?id=1.1,那么也会通过检测,因为1.1也是数字,或者id=0也行。有这样的id吗?没有,任何数据库表中的id都是从1开始的正整数。所以请大家不要这样再使用它来检测id的合法性。那用什么呢?这里就要用到正则表达式了。
可以通过id=cint(request("id"))或clng,或者就是用正则表达式替换所有的非数字字符,这样就只有数字了。(asp下替换非数字为空的正则)

2,缺少错误处理,或错误处理不完善。比如rs.eof的情况,不加处理的话,我写个id=999999999999999,那么程序就会出错,我相信绝少有哪个网站有如此大的id,即使有我还可以换个更大的。我曾经就遇到过有人用工具连续试探我的id,从8000测试到10000多。还有就是type参数,一般网站的新闻都会分好几个栏目,这时都依靠type来确定每个列表页面该显示哪个栏目的内容,如果有人提交一个不存在的type值呢?这也需要处理,select case中的case else子句就是为这种意外情况准备的,别为了省事不去用它。
·绕过登录检测的问题大多数是因为程序员把登录检测语句写成这样:


代码如下:

Sql="Select count(*) from Admin Where UserName='"&UserName&"' and Pwd='"&Pwd&"'"
if rs(0) > 0 then....

这个时候的注入就是用or注入,构造出一个特殊的sql语句:
Sql="Select count(*) from Admin Where UserName='' or ''='' and Pwd='' or ''='' "
这就是在用户名和密码的文本框都输入 ' or ''='' 构造出来的,这个时候count(*)的结果必然大于0,它等于你的admin表的记录数,因为每条记录都符合select语句的要求。当然我们可以通过制定相应的规则来过滤这种注入信息,同时辅助其他方法,比如我是这样写的:


代码如下:

"select password from Admin where username='"&UserName&"'"
if rs.eof then
...
else
if rs("password")=request.form("pass") then
...
end if
end if

这样的写法,即使你没有制定任何规则,那么上述方式也基本无法注入,因为它只能通过第一步检测,在后面的if rs("password")=request.form("pass") then 这里它就没有办法了,因为不会有人给管理员设置' or ''='' 这样的密码。这就没法相等,登录必然被拒绝。当然,为了稳妥起见,最好两种办法同时使用,确保万无一失。
注入还有一种经常被人忽略的情况,就是cookie注入。在一个参数既可能通过url传递,又可能通过表单传递的时候,大多数人都会简写为request("page")这样的方式。你轻松了,注入者也轻松了,因为request在不制定具体方法的时候,它尝试接收参数的顺序是QueryString/Form/Cookie,如果注入者伪造一个cookie,然后在浏览器中输入www.sitename.com/shownews.asp,如果shownews.asp里面写的是request,它就不会报错,因为程序从cookie中找到了id,如果没有对这个参数进行检测,那么注入就可能发生了。这里建议大家用select case或者if来判断,麻烦了一点,但安全第一呀。
二,ASP上传漏洞。用过几种无组件上传类,大同小异,都缺乏对上传文件类型的有效检测,这个问题比较郁闷,现在只能依靠其他手段来手动检测,而且都是在服务器端的。如果说ASP本身有什么问题的话,就在这里了。
三,后台权限判断。看过几个后台,权限判断都是只在登录的第一个页面判断权限,后台的每个页面都没有判断了。后台所有页面都是需要判断权限的,否则我在浏览器里直接输入某个功能页面的地址就可以畅通无阻了,你那个后台登录还做它干什么呢?
四、忽略服务器端验证。javascript是个强大的东西,它最常用的功能就是客户端的检测,比如不许输入空字符,或者定义正则表达式完成更高级的检测,有的程序员觉得这很好,浏览器帮助验证了,客户端就减少了很多工作量,服务器负担也小了,性能也优化了。但现在的浏览器几乎都提供了取消javascript支持的选项,也就是说,客户端提交的信息可能根本就没有经过检测就被提交给服务器了。这个时候你那节省下来的服务器资源在安全性面前就显得微不足道了,所以说客户端和服务器端的验证都需要,甚至你在客户端可以没有任何验证,服务器端都必须有验证。
这同样适合于处理站外提交的信息。站外提交也可以跳过客户端验证的,最简单的做法就是右键查看你的表单源码,复制到本地,把action的值改成网络地址,然后去掉客户端验证的内容。即使他能够躲过你的站外提交检测代码,也无法跳过服务器端的验证。当然,如果他提交的内容没问题,很正常,那站外提交的东西保存也就保存了——可是,如果是这样,他还搞这么复杂干什么呢?
五、总结。
事实上所有asp可能出现的问题都和一个问题有关,那就是错误。要么是程序写法上出现的错误,要么是客户端提交错误参数导致的错误。ASP有一个错误处理机制,建议大家写到每页都要包含进去的那个页面里,就是on error resume next,忽略错误继续执行,哪怕错误导致页面什么也显示不出来,它也不会向客户端透露一点错误的内容,有了它能解决不少问题。但最终ASP的安全还是要靠程序员的细心,对于每个可能出现问题的地方都加以处理,这样的程序才会变得安全。
本文参考了atmo相关文章的很多内容,在此向atmo表示感谢!如果有什么错漏之处,还希望各位指出!
大家可以多参考下网站上发布的一些webshell攻击与防范的文章。

(0)

相关推荐

  • asp文件用什么软件编辑

    编辑asp文件 记事本:默认的ASP文件双击是不能打开的,一般都会使用记事本对ASP文件进行编辑,但是记事本功能单一,只能进行一些简单的操作,而且当你的ASP文件编码是UTF-8编码的,使用记事本还会出现问题,它会把文件改为带签名的文件,从而会引起很多未知问题. 文本编辑器:为了方便对各种文件的编辑,现在推出了很多文本编辑器,功能十分强大,使用它编辑ASP文件的时候会把很多语法标红,有利于我们判断是否正确书写了函数或者语言结构,当然也不会出现上述篡改签名的情况. 推荐:使用文本编辑器对ASP文件

  • IIS 运行ASP文件500内部错误解决方法大全

    1 IIS服务器出现500错误 2错误原因:500错误的原因一般是源程序出现错误造成的. 3 解决办法:1 首先设置IE浏览器à工具->Internet选项 2 刷新或者重新打开500错误页面就会出现错误的程序部分 3 根据错误提示,然后解决问题. 4 ADODB.Connection 创建失败的可能解决方法: 1.重装MDAC2.8. MDAC 2.8下载地址: http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&am

  • 如何准确定时运行ASP文件

    在一定的时候,要定时的运行某个ASP文件去执行一个任务,如一个工厂在早上9点钟要采集所有的电表的读数,当然这要通过IN SQL连接到各个电表中,我们现在就是用一个ASP文件把IN SQL中表的读数再集中到MS SQL中. 可能你看到的定时运行ASP文件的方法有多种,不过我现在要说的是一种简单的方法,利用计划任务就可简单的实现. 首先,你要写一个js或者vbs文件来调用你所有执行的ASP.下面是js和vbs文件的代码,你可以任选一个,执行效果是一样的. vbs代码-----------------

  • pjblog的ubbcodeasp文件

    复制代码 代码如下: <%'===========PBlog2 UBB代码转换代码=========='      Author:PuterJam'         Copryright PBlog2 '         Update: 2005-12-29'===========================================Function UBBCode(ByVal strContent,DisSM,DisUBB,DisIMG,AutoURL,AutoKEY) If isE

  • asp是什么格式 asp文件用什么打开

    什么是ASP,它能干什么? 一.什么是ASP? 从字面上说,ASP包含三方面含义: 1.Active:ASP使用了Microsoft的ActiveX技术.ActiveX(COM)技术是现在Microsoft软件的重要基础.它采用封装对象,程序调用对象的技术,简化编程,加强程序间合作.ASP本身封装了一些基本组件和常用组件,有很多公司也开发了很多实用组件.只要你可以在服务器上安装这些组件,通过访问组件,你就可以快速.简易地建立自己的WEB应用. 2.Server:ASP运行在服务器端.这样就不必担

  • asp文件如何打开

    运行asp文件 首先我们需要搭配运行环境,运行ASP文件需要的服务器是IIS服务器,所以我们要来安装和配置IIS服务器,其实相比于其他的服务器,IIS简单很多,因为是windows自带的服务器,只要安装必要的组件就行了. 了解过后我们就来安装IIS吧,首先打开控制面板(小编使用的操作系统是windows2003,很多网站都使用它作为默认的服务器,因此小编以此为例),找到添加或删除程序选项(如下图红线标注处所示),然后点击进入. 接着我们就看到添加或删除程序界面,点击添加删除windows组件,然

  • 将首页转成静态html页的asp文件

    此程序只能将首页转成静态!(真对一个页面) 将createhtml.asp文件上传到 你的空间存放首页文件(index.asp)的目录下录入网址直接打开createhtml.asp接提示操作就可以了如果没有转成功可将createhtml.asp更名试一下(如:改成z.asp)录入网址直接打开z.asp 本文件可以随便改名不影响运行 复制代码 代码如下: <% if request.QueryString("action")="ok"  then dim kk,

  • ASP文件中的安全问题

    浅谈ASP的安全问题 先说句牢骚话,我经常看到有人说ASP不安全,比如容易被注入,这种说法我一直感到无法理解.如果你水平不高,那么你用php用ASP.net用JSP都有被注入的可能,这关ASP什么事?ASP只是一种技术,用它开发的网站是否安全,只跟程序员和服务器管理员的水平有关系,任何技术开发的网站都一样.只要你的程序有漏洞,而且你用的数据库支持标准SQL语法,或者注入者会这种语法,那么就存在被注入的可能. 闲话少说,我今天结合我个人的经验来简单说说ASP中常见的安全问题. 一,注入.无论什么时

  • ASP编程中连接数据库和数据库操作的常用代码

    ASP编程常用的代码  1. ASP与Access数据库连接:   复制代码 代码如下: <%   dim conn,mdbfile   mdbfile=server.mappath("数据库名称.mdb")   set conn=server.createobject("adodb.connection")   conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库

  • asp.net中MVC借助Iframe实现无刷新上传文件实例

    本文实例讲述了asp.net中MVC借助Iframe实现无刷新上传文件的方法.分享给大家供大家参考.具体实现方法如下: html: 复制代码 代码如下: <div id="uploadwindow" style="display: none;">     <form action="/ShopActivitys/ImportActivityItems" id="form1" name="form1&

  • 详解ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.String.Net 等,这些第三放依赖注入组件基本上都提供了一套配置注入或者配置生命周期的方式,除了直接配置到类里面之外,还提供了要么使用 xml 文件,要么使用 json 等,那么在新的

  • ASP/VBScript中CHR(0)的由来以及带来的安全问题分析

    该字符标识着字符串的结束,也称作null-terminated,这个给脚本编程尤其是ASP编程带来了一定的麻烦,很多人可能会问为什么要保留这个特殊字符,我们可以追溯到编写操作系统的语言之一C语言,学过C/C++的童鞋可能知道,在字符串中标识一个字符串结束靠的就是结尾的\0(NULL或者0),否则不能称作为字符串,只能说是字符串数组,任何对于字符串操作的函数如果传入的字符串丢掉了这个结束NULL字符,都有可能会出现异常. 复制代码 代码如下: char strbuf[] = "Hello"

  • ASP.NET中FileUpload文件上传控件应用实例

    使用 FileUpload 控件,可以为用户提供一种将文件从用户的计算机发送到服务器的方法.该控件在允许用户上载图片.文本文件或其他文件时很有用.要上载的文件将在回发期间作为浏览器请求的一部分提交给服务器.在文件上载完毕后,您可以用代码管理该文件. 大致了解了一下FileUpload,让我们来看一下FileUpload几个实际应用中问题的处理方法. 1.一次上传多个文件 要一次上传多个文件,我们可以像传单个文件那样对每个文件单独进行处理,除此之外,我们还可以使用HttpFileCollectio

  • asp.net中Fine Uploader文件上传组件使用介绍

    最近在处理后台数据时需要实现文件上传.考虑到对浏览器适配上采用Fine Uploader. Fine Uploader 采用ajax方式实现对文件上传.同时在浏览器中直接支持文件拖拽[对浏览器版本有要求类似IE版本必须是9或是更高的IE10].在不同浏览器中提供统一用户体验.该组件基本覆盖目前所有主流浏览器.同时没有任何第三方组件依赖.相当Clear.在服务器端已经覆盖支持了ASP.NET/ColdFusion/Java/Node.js/Perl/PHP/Python. 对上传细节类似限制文件大

  • ASP.NET中Config文件的读写示例

    本文主要给大家介绍了关于ASP.NET中Config读写示例的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍吧. 方法如下: 如果是WinForm程序,需要添加引用: System.ServiceModel System.Configuration App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> &l

  • ASP.NET中实现文件的保护性下载基础篇

    一.文件保护性下载的需求 如果我们需要在站点上出售数字形式的商品,如电子书.数字油画等,那么如何在供授权用户正常下载的同时又阻止非授权用户非法下载您的产品呢? 通过Forms身份验证,只能使这个问题得到部分解决.本文中,我将讲解如何防止某些用户访问站点上的某些文件;即使这些文件能够被这些用户直接浏览. 解决这个问题的方法有多种,但是有些方法本身就有问题.本文中,我们将考察软件供应厂商常用的一些技术,然后再介绍一种新的解决方案.需要注意的是,这里介绍的是针对ASP.net站点的. 二.常见的文件保

  • ASP.NET中文件上传下载方法集合

    文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以及下载方法 4.上传Internet上的资源 第一部分: 首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下: <httpRuntime exec

随机推荐