`
litianyi520
  • 浏览: 43006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

asp防注入的语句

    博客分类:
  • asp
阅读更多
在做安全配置前,我们先了解一下入侵者的攻击手法。现在很流行注入攻击,所谓注入攻击,就是利用提交特殊地址将ASP中引用的正常SQL语句和入侵者所需要的SQL语句一并执行,使入侵者达到入侵的目的。现在更是有一些脚本注入工具发布,使菜鸟也可以轻松完成对ASP的注入攻击。那么我们先来了解一下这些工具是怎样注入的。
首先,入侵者会对一个网站确定可不可以进行注入,假设一篇文章的地址为:http://www.scccn.com/news.asp?id=1一般会以提交两个地址来测试,如:
http://www.scccn.com/news.asp?id=1 and 1=1
http://www.scccn.com/news.asp?id=1 and 1=2
第一个地址后面加了 and 1=1,构成的SQL语句也就变为了:Select * from 表单名 where id=1 and 1=1这句话要成立就必须and前后语句都成立。那么前面的文章地址是可以访问的,后面的1=1也是客观成立的,那么第一个地址就可以正常显示;相反1=2是显然不成立的,关键就看这步了,如果提交and 1=2页面还是正常显示说明他并没有将and 1=2写入SQL语句,此站也就不存在注入漏洞;但如果提交and 1=2之后返回了错误页面则说明此站点将后面的语句带入了SQL语句并执行了,也就说明他可以进行SQL注入。(注:如果地址后面跟的是news.asp?id='1'就得变为news.asp?id=1' and '1'='1来补全引号了)
    那么,知道可以注入后入侵者可以做什么呢?
    这里就简单的说一下,比如提交这样的地址:
http://www.scccn.com/news.asp?id=1 and exists (select * from 表名 where 列名=数据)
根据返回的正确或错误页面来判断猜的表名和列名是否正确,具体实现时是先猜表名再猜列名。当猜出表名和列名之后还可以用ASC和MID函数来猜出各列的数据。MID函数的格式为:mid(变量名,第几个字符开始读取,读取几个字符),比如:mid(pwd,1,2)就可以从变量pwd中的第一位开始读取两位的字符。ASC函数的格式为:ASC("字符串"),如:asc("a")就可以读出字母a的ASCII码了。那么实际应用的时候就可以写为:asc(mid(pwd,1,1))这样读取的就是pwd列的第一个字符的ASCII码,提交: asc(mid(pwd,1,1))>97以返回的页面是否为正确页面来判断pwd列的第一个字符的ASCII码是否大于97(a的ASCII码),如果正确就再试是否小于122(z的ASCII码)……这样慢慢缩小字符的ASCII码的范围,猜到真实的ASCII码也只是时间的问题。一位一位的猜就可以得到数据库中的用户名和密码了。还有一种ASP验证缺陷——就是用户名和密码都输'or '1'='1,构造SQL语句Select * form 表单名 where username='' or '1'='1' and pwd='' or '1'='1'就可以达到绕过密码验证的目的。
    说了那么多,其实防范的方法很简单,我们把特殊字符(如and、or、'、")都禁止提交就可以防止注入了。ASP传输数据分为get和post两种,    get是通过将数据添加到URL后提交的方式,post则是利用邮寄信息数据字段将数据传送到服务器。
那么,我们先来看看如何将get方式提交数据中的特殊字符过滤。首先要知道,IIS是以字符串的形式将get请求传给asp.dll的,在将数据传递给Request.QueryString之后,asp解析器会解析出Request.QueryString的信息,然后跟据"&"来分出各个数组内的数据。现在我们要让get方式不能提交以下字符:
'、and、exec、insert、select、delete、update、count、*、%、chr、mid、master、truncate、char、declare
那么,防止get方式注入的代码就如下:
<%
dim sql_leach,sql_leach_0,Sql_DATA
sql_leach = "',and,exec,insert,select,delete,update,count,*,%,chr,mid,master,truncate,char,declare"
sql_leach_0 = split(sql_leach,",")

If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(sql_leach_0)
if instr(Request.QueryString(SQL_Get),sql_leach_0(Sql_DATA))>0 Then
Response.Write "请不要尝试进行SQL注入!"
Response.end
end if
next
Next
End If
%>
其中,变量sql_leach中的字符串就是指定过滤的字符,以","隔开。
    接着过滤post提交方式的注入,我们可以看到,request.form也是以数组形式存在的,只要对它再进行一次循环判断就可以了。防止以post方式注入的ASP代码如下:
<%
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(sql_leach_0)
if instr(Request.Form(Sql_Post),sql_leach_0(Sql_DATA))>0 Then
Response.Write "请不要尝试进行SQL注入!"
Response.end
end if
next
next
end if
%>
    这样,get和post注入都被禁止了。
    另外就是数据库的问题,首先现在很流行的用*.asp命名数据库已经没什么意义了,因为可以用下载软件来下载;在数据库名前加#的作用也不大,虽然访问时浏览器只访问#前面的内容,但是如果将#用其unicode表达法(%23)替换掉就可以访问了。既然这样,那么我们禁止入侵者暴库就可以了。一般暴数据库的方法,是将读取数据库的文件名(如conn.asp)前的"/"替换为"%5c"("\"的unicode表达法)这样就可以使ASP将%5c解释为访问网站根目录,而实际是数据库不在指定位置,找不到数据库,再将IE设置为"显示友好的HTTP错误信息"的情况下自然就暴出了数据库的路径。
    防范的方法也比较简单,就是让ASP程序即使在出错的情况下也不报错直接执行下一步就可以了。在ASP的conn文件中加这么一句:on error resume next就OK了。
还有几点要注意的:
1.数据库命名长些并尽量放在网站根目录下,数据库的表名和字段名尽量不合常规;2.保存敏感信息(如用户和密码)的数据库尽量和在前台页面引用的数据库分开(如果用新的暴库方法由前台页面暴出了数据库,那么入侵者也得不到有价值的信息);3.后台的目录名和登陆页面的名字要改的不寻常些,千万不可出现admin或者login之类的字符,以免被注入软件扫描到后台。4.如果前台或后台有上传文件的功能,切记不能有任何其他功能直接的或间接的拥有更改文件名的权限。这样的多重保障就更加安全些了。
分享到:
评论

相关推荐

    最新ASP通用防SQL注入代码

    从标签"防注入"、"最新ASP SQL注入代码"、"最新ASP通用防SQL注入代码"我们可以看出,这个压缩包文件的核心内容是关于防止ASP应用程序遭受SQL注入攻击的代码示例,它适用于各种ASP应用场景。 在压缩包内的文件"通用...

    ASP源码—360通用ASP防护代码(防sql注入).zip

    4. **最小权限原则**:为应用程序的数据库连接分配最小必要的权限,避免攻击者通过注入语句执行危害更大的操作。 5. **错误处理**:避免在错误消息中泄露敏感信息,如数据库结构或查询失败的具体原因,这可能会为...

    经典的ASP防注入,我已经经过测试了

    ### 经典的ASP防注入方法解析 #### 标题:经典的ASP防注入,我已经经过测试了 在本文中,我们将深入探讨一个经典的ASP(Active Server Pages)防止SQL注入的方法,并对其进行了详细的测试验证。 #### 描述:经典的...

    asp防注入代码 asp防注入代码

    asp 防注入代码详解 ASP 防注入代码是指在 ASP 编程中防止 SQL 注入攻击的代码。SQL 注入攻击是一种常见的网络攻击手段,攻击者通过输入恶意 SQL 语句来访问或修改数据库中的敏感信息。 在本文中,我们将详细介绍...

    asp防注入的代码(经典)

    为了保护ASP应用免受SQL注入攻击,开发者通常会采取一些预防措施,下面我们将详细介绍如何在ASP中实现防注入的代码。 首先,理解SQL注入的原理是至关重要的。SQL注入通常是由于应用程序没有充分验证或清理用户输入...

    ASP-ISAPI通用防注入过滤器

    一个基于IIS系统的组件,其拥有强大的防ASP注入功能.能在ASP程序本身存在注入漏洞的情况下防御注入攻击。同时它还具备防数据库下载、防止数据库扩展名被修改为asp后插入ASP语句攻击等功能。内核全部采用C++编写,...

    asp通用防SQL注入文件

    标题中的“asp通用防SQL注入文件”指的是一个专门用于防止ASP应用程序遭受SQL注入攻击的工具或代码片段。这个工具通常包含了一系列的函数或方法,用于清理和验证用户输入,确保它们不会导致不安全的SQL命令被执行。 ...

    ASP防注入文件,放在CONN文件下

    ### ASP防注入技术详解 #### 一、概述 在当今高度信息化的社会中,Web应用程序的安全性变得尤为重要。SQL注入攻击是常见的安全威胁之一,它利用Web应用中的漏洞将恶意SQL命令插入到查询语句中执行,从而导致数据...

    ASP.NET通用防注入实用版

    ASP.NET通用防注入实用版是一款针对C#编程语言和ASP.NET框架开发的安全工具,主要用于防止SQL注入等类型的攻击。SQL注入是一种常见的网络安全威胁,黑客通过输入恶意SQL代码,以欺骗服务器执行非授权的操作,获取...

    ASP-ISAPI通用防注入过滤器 v1.0

    ASP-ISAPI通用防注入过滤器 是一个基于IIS系统的组件,其拥有强大的防ASP注入功能.能在ASP程序本身存在注入漏洞的情况下防御注入攻击。同时它还具备防数据库下载、防止数据库扩展名被修改为asp后插入ASP语句攻击等...

    简单的asp.net登陆有一定的sql防注入功能

    4. **限制权限**:数据库连接应具有最小权限,仅允许执行必要的操作,避免攻击者通过注入语句执行额外的数据库操作。 5. **使用存储过程**:存储过程可以提供一定程度的保护,因为它们在服务器上预先编译,并且可以...

    asp.net防注入代码

    - **ASP.NET(C Sharp)防SQL注入脚本2.0**:这可能是一个C#编写的脚本,用于检测和阻止SQL注入攻击。它可能包含了自定义的输入验证规则、异常处理机制,以及与数据库交互的安全接口。 **总结** 防止SQL注入是ASP...

    C#防SQL注入代码的三种方法

    为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位。  下面说下网站防注入的几点要素。  一:丢弃SQL语句直接拼接,虽然这个写起来很快很方便。  二:如果用SQL语句,那就使用参数化...

    Asp.Net通用Sql防注入源码

    在Asp.Net开发中,SQL注入是一个非常重要的安全问题,它允许恶意用户通过输入特定的SQL语句来操控后台数据库,可能导致数据泄露、系统瘫痪甚至整个网站的安全性受到威胁。"Asp.Net通用Sql防注入源码"是针对这个问题...

    asp.net的SQL防注入过滤函数大集合

    ### ASP.NET 的 SQL 防注入过滤函数大集合 #### 概述 在 Web 开发中,SQL 注入是一种常见的安全攻击方式,它利用应用程序对用户输入数据处理不当的漏洞,将恶意 SQL 代码插入到查询语句中,进而执行非法操作。为了...

    sql.rar_SQL防注入_asp 防注入_sql注入_防破

    SQL注入是一种常见的网络安全威胁,它允许攻击者通过输入恶意的SQL语句来操纵数据库系统,获取敏感信息,甚至破坏整个数据库。在这个“sql.rar”压缩包中,我们重点关注的是如何防止这种攻击,尤其是针对ASP(Active...

    ASP防SQL注入代码

    ### ASP防SQL注入代码解析 #### 一、概述 随着互联网技术的发展,Web应用程序的安全问题日益突出。其中,SQL注入攻击是一种常见的安全威胁,它利用Web应用中的漏洞将恶意SQL命令插入到查询语句中执行,从而导致...

    sql通用防注入源码

    `Neeao_sql_admin.asp`可能是一个管理员后台的入口,而`Neeao_SqlIn.Asp`可能是处理SQL查询和执行防注入逻辑的部分。在这些文件中,开发者可能采用了上述的防注入策略,例如通过预编译的SQL语句、验证用户输入、转义...

    SQL注入语句

    1. **返回数据库名**:"and db_name()&gt;0" 这个SQL注入语句用于返回当前连接的数据库名称。`db_name()` 函数返回当前使用的数据库的名称,通过将其与数字进行比较,可以绕过某些简单的过滤机制。 2. **获取连接...

    asp防注入验证代码

    在ASP中实现防注入验证,可以采取以下几种方法: 1. **转义特殊字符**:对用户输入的数据进行转义处理,比如将单引号(')转换为(&apos;),双引号(")转换为(&quot;)等,防止这些字符被解释为SQL语句的一部分。 2. **...

Global site tag (gtag.js) - Google Analytics