`
charrysong
  • 浏览: 48810 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

sp常识
server.htmlEncode还为HTML编码(用于输出不正常)
很多人抱怨ASP安全不高、速度不快,其实ASP也很优秀。用PHP一样可以写出拉圾程序,用ASP依然可以写出很优秀的程序。安全高不高取决于编程 者,PHP依然可以写出漏洞百出的程序,所以,别抱怨ASP这样那样的毛病,我写ASP已经三年多了,一直都认为它很方便,虽然有些地方写着很复杂,及不 上PHP,因为这样,ASP写着感觉更爽。把多年总结的一些ASP常见的安全事项写出来。

一、古老的绕验证漏洞

虽然古老,依然存在于很多小程序之中,比如一些企业网站的后台,简单谈谈。这个漏洞出现在没有对接受的变量进行过滤,带入数据库判断查询时,造成SQL语句的逻辑问题。例如以下代码存在问题:

username=request("username")

password=request("password")

sql = "select * from user where username='" & username & "' and password='" & password & "'"

很容易看出在没有对username、password进行过滤就带入SQL语句进行判断了,提交'or''=',SQL语句就变成了select * from user where username=''or''='' and password=''or''='',返回值为ture。

一般在登录处过滤字符,代码如下:

replace(request.form("username"),"'","")

replace(request.form("password"),"'","")

上面指定了POST方式接受提交过来的数据,指定接受方式很重要,下面谈谈。

二、指定接受数据提交方式

ASP 中的Request对象可以接受GET、POST、COOKIES请求。将其简化写成**=Request("参数")的格式接受数据,此时WEB接受数 据时先以GET方式接受,如果不匹配再以POST方式接受,最后再以Cookies方式接受。也就是Cookies注射造成的原因。

指定接受方式不仅可以避免Cookies注射,还可以提高WEB处理的速度。

一个存在问题的代码如下:

id=request("id")

sql="select * from Articles where id="&id&""

set rs=conn.execute(sql)

这里不管id过滤没有过滤,关键是id接受时没有指定接受方式,造成了Cookies注射。

这样写:

id=request.QueryString("id")

sql="select * from Articles where id="&id&""

set rs=conn.execute(sql)

id使用了get方式接受数据。

三、HtmlEnCode

HtmlEnCode是ASP中Server的一个对象,可以直接格式化HTML不被执行在浏览器上,比如以下代码:

<%

lx="<script>alert('test')</script>"

response.write lx

%>

最后浏览时弹出提示窗口。

如果改成以下代码:

<%

lx="<script>alert('test')</script>"

lx=Server.HtmlEncode(lx)

response.write lx

%>

浏览器直接显示<script>alert('test')</script>,HTML代码直接被格式化了。

这个对象很有用,一般在接受数据不需要使用HTML代码格式的情况下,直接使用它进行过滤。比如搜索结果显示、留言板等等。如:

test=request.QueryString("test")

response.write test

以上代码中,test没有进行过滤直接显示了,如果test接受一个内容为<script>alert("test")</script>时,代码被执行,就会弹出一个内容为test的提示。

改写为下:

test=server.htmlencode(request.QueryString("test"))

response.write test

那么再次提交<script>alert("test")</script>,浏览器就显示一段字符"<script>alert("test")</script>".

四、注射漏洞

注射方面就不多介绍了,介绍起来太多了,大家也很熟悉,直接说防范方法,有问题的代码如下:

id=request("id")

sql="select * from Articles where id="&id&""

set rs=conn.execute(sql)

明显id不进行过滤带入了SQL查询,最简单的方法就是判断id是否为整型数据,代码如下:

id=Request("id")

if Not IsNumeric(id) then '这里用IsNumeric判断id是否为整型

Response.write "错误提交"

Response.end

else

sql="select * from Articles where id="&id&""

set rs=conn.execute(sql)

end if

还可以使用判断提交内容是否含有非法字符,直接贴代码,代码是以前小蓝的Tryaspwebsystem程序中的防注射代码,经过我们两个改了又改:

<%

dim sql_injdata

SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"

SQL_inj = split(SQL_Injdata,"|")

'get拦截

If Request.QueryString<>"" Then

For Each SQL_Get In Request.QueryString

For SQL_Data=0 To Ubound(SQL_inj)

if instr(LCase(Request.QueryString(SQL_Get)),Sql_Inj(Sql_DATA))>0 Then

Response.Write "非法提交"

Response.end

end if

next

Next

End If

'post注入拦截 If Request.Form<>"" Then

For Each Sql_Post In Request.Form

For SQL_Data=0 To Ubound(SQL_inj)

if instr(LCase(Request.Form(Sql_Post)),Sql_Inj(Sql_DATA))>0 Then

Response.Write "非法提交"

Response.end

end if

next

next

end if

on error resume next

%>

上面代码中没有看到防范Cookies注射的?前面说了,指定了接受方式就没问题了。

五、字符过滤

一般用来防止跨站,定义一个结构,将非法的字符全部替换了:

function Str( data )

Str = replace( data, "'", "''" )

Str = replace( Str, "&", "&" )

Str = replace( Str, " ", " " )

Str = replace( Str, "<", "&lt;" )

Str = replace( Str, ">", "&gt;" )

Str = replace( Str, VbCr, "<br>" )

Str = replace( Str, "'", "'" )

Str = replace( Str, CHR(34), """ )

end function

直接用str(request("*"))的方法调用过滤。

如果要还原为正常显示,代码如下:

function Str1(data)

Str1 = replace( data, "'", "''" )

Str1 = replace( Str1, "&", "&" )

Str1 = replace( Str1, " ", " " )

Str1 = replace( Str1, "&lt;", "<" )

Str1 = replace( Str1, "&gt;", ">" )

Str1 = replace( Str1, "<br>",VbCr )

Str1 = replace( Str1, "'","'" )

end function

六、数据库防下载

只要将数据库的扩展名删除,就可以做到防下载了。大家都知道IIS里有个默认文档,当用户浏览网站主页或者网站目录时,首先浏览的就是这默认文档, 一般为 index.htm、index.asp等等。如果删除了扩展名,那么直接提交数据库地址时,就会被误认为浏览目录,但这个目录并非存在,所以404错 误,返回找不到该页。举例:假设我们取数据库名为"luanx"(没有扩展名),然后通过访问地址http://**/luanx,假设默认文档最前面的 一个是index.htm,在访问时会被解析为http://**/luanx/index.htm,因为此目录不存在而找不到(测试环境是 Windows XP/2003,IIS 5.0/6.0,FAT32/NTFS的硬盘)。此方法只用于Windows 2003的服务器,XP下还是能下载,不过没几个人用XP架设服务器的。

七、暴库防范

暴库这个大家都知道,在数据库连接文件中加入一句错误处理就可以了:On Error Resume Next

八、上传漏洞防范

直接使用lcase函数,该函数从右截取指定个数的字符串,截取后进行判断。关于上传漏洞不建议过滤扩展名,而是直接判断是否为指定的扩展名,代码如下:

file=lcase(right(file.filename,4))

if file<>".gif" and file<>".jpg" then

response.write "文件格式不对" response.end

end if

九、User-agent的安全

可以直接参考http://luanx.blogbus.com/logs/30631254.html

加上这一点注意的目的是想让大家感受到任何输入、输出都不是可信任的。

十、杂七杂八

除了以上,还要注意一些问题:

1、后台路径更改。

2、密码用MD5加密。

3、数据库表段不要用一些常见的,容易被猜出来。

4、任何数据库名都要修改,特别是一些编辑器或者网上下的第三方面程序加入在自己程序中的。

5、别被社工就OK了。

关于ASP安全方法总结这么多了,以上都是ASP安全编程中的最基础,也是核心,要记住任何输出、输入的都可能是危险的,都要进行过滤,其实脚本安全搞着很有趣,欢迎大家讨论不足或者提出更多。

转自:http://www.ok22.org/art_detail.aspx?id=11

分享到:
评论

相关推荐

    收集的ASP.NET小常识

    收集的ASP.NET小常识,希望能够对大家有所帮助,能够让大家更了解ASP.NET

    USBASP+固件升级指南_buried6v4_arduinousbasp_AVR单片机_烧录_avr_

    但这就带来了一个问题——BootLoader的烧录(也就是引导程序的烧录)arduino的BootLoader不能使用串口烧录这是常识(我个人认为),唯一的办法就是编程器(也叫烧录器或下载器)可以将一块arduino板子制作成...

    asp基础asp基础

    在上一期中作者向诸位简要介绍了 ASP 脚本语言之一 VBScript 的一些基本常识,本期将继续给大家讲解 VBScript 的脚本编写方法,并通过展示 VBScript 在 ASP 程序编写过程中的一系列实例使大家对 VBScript 有更进一层...

    基于asp技术的系统

    普洱房地产信息网程序主要栏目功能包括房产动态、拍卖公告、普洱楼盘、出售房源、出租房源、需求房源、购房常识、家居装修、在线问答、发免费布信息等。 普洱房地产信息网更新内容: 1、修正房产信息价格和面积错误...

    整理使用的asp代码

    原装ASP程序代码,一些小常识的问题。可以大家随便看看

    深山ASP旅行社网站系统源码 v2.6.4.rar

    深山ASP旅行社网站系统采用asp access架构,主要功能模块:网站设置、新闻管理、网站公告、管理旅游景点、酒店管理、酒店介绍、旅游线路、管理旅游常识、出行指南、租车提示 美食介绍。  后台路径:/admin/index....

    asp+sqlserver2000人力资源信息管理系统

    asp+sqlserver2000人力资源信息管理系统 网站系统主要包括以下各功能模块: (1) 人事管理:主要包括人力规划、工作管理和考勤管理3个部分。 (2) 个人管理:主要包括工作管理、消息管理、信息检索和个人维护4个部分。...

    题(1) 跳马(1) Asp.net(1) NET(1) 网页设计配色常识(1) DOM文档对象中文手册(1) Services(1)

    题(1) 跳马(1) Asp.net(1) NET(1) 网页设计配色常识(1) DOM文档对象中文手册(1) Services(1) 题(1) 跳马(1) Asp.net(1) NET(1) 网页设计配色常识(1) DOM文档对象中文手册(1) Services(1)

    asp旅行网网站(完整版源码)

    ` 旅游须知、常识、温馨提示 同行交流!` 合作伙伴专区,门票、景点、机票等 友情连接! 网站联盟 网站导航! 网站导航图 关于我们 企业简介! 用于对旅行社的公司介绍 分支机构!多 展示公司分支结构 企业动态!多 ...

    基于Asp.Net的健身房管理系统.zip

    基于Asp.Net Asp.Net、SQLServer 该系统的基本功能包括管理员、会员、教练三个角色功能模块。 对于管理员可以使用的功能模块主要有首页、个人中心,系统公告管理、健身常识管理,会员管理、教练管理、教练考勤管理...

    Asp.net常用代码

    asp。net常用的基本常识,知识深入挖掘,代码常用的知识,有用知识点,用时不用再去找。

    《ASP开发王》pdf格式

    《ASP开发王》下载 &lt;br&gt;包含《万维网应用程序开发纲要》,《纲要》是万维网应用程序开发所宗,是网络应用程序开发的指南针,是理论基石和实践的总结,离开《纲要》的指导,试图有效开发和维护应用程序是不可想象...

    人力资源管理系统 asp+aql

    该模块主要功能是管理保险基本常识信息、保险产品介绍信息、保险政策法规信息。  薪酬管理模块 该模块主要功能是管理员工薪酬信息。  系统设置模块 该模块主要功能是管理操作员信息、设置操作员操作权限。 操作...

    多用户商城asp+access

    基于Asp.Net+C#+Access,具有智能化、高扩展、稳定、安全等特性,并拥有超强功能,可自由添加频道,后台智能修改风格,只要懂得网站常识的站长就可以轻松利用易想多用户商城建立起专业的大型网店,让网友在其中开店...

    asp+sqlserver人力资源信息管理系统毕业设计

    (5) 保险管理:主要包括基本常识、产品介绍、政策法规、基本常识管理、产品介绍管理和政策法规管理6个部分。 (6) 薪酬管理:主要包括薪酬登记、薪酬修改个薪酬查询3个部分。 (7) 系统管理:主要包括添加用户和用户...

    ASP.NET/C#火车订票系统

    主要功能有:新闻中心,用户注册,车次查询,在线订票,旅途常识,系统简介,留言板,后台管理等。

    睿拓旅游信息门户系统 v1.1 ASP.rar

    睿拓智能网站系统-睿拓旅游信息门户系统1.0免费版 软件大小:6M 运行环境:asp access 本版本是永州睿拓旅游信息网站管理系统包括了企业网站常用的各种功能,带完 整的后台管理系统,本程序无任何功能限制下载即可...

    基于asp.net婚庆网站含论文和源码数据库.zip

    这是一款简洁十分美观的ASP.NET+sqlserver源码,界面十分美观,功能也比较全面,比较适合 作为毕业设计、课程设计、使用,感兴趣的朋友可以下载看看哦 使用说明请关注我的csdn博客 本婚庆网站管理系统分为前台和...

    毕业答辩-ASP基于BS结构的工厂设备管理系统的设计与开发(源代码论文).rar

    ASP基于BS结构的工厂设备管理系统的设计与开发(源代码论文).rar

    答你所问 .NET小常识 方便学习asp.net的朋友

    1、.NET是什么? .Net全称.NET Framework是一个开发... C#是.NET Framework框架支持的一种主力开发语言, 可用于开发ASP.NET网站, Windows 程序,控制台程序,甚至于手机软件,2、ASP.NET、.NET和C#的关系是怎样的? 

Global site tag (gtag.js) - Google Analytics