ASP编码必备的8条原则

ASP是Active Server Page的缩写,意为“动态服务器页面”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。在这里仅就代码优化进行一些简单讨论。

1、声明VBScript变量

在ASP中,对vbscript提供了强劲的支持,能够无缝集成vbscript的函数、方法,这样给扩展ASP的现有功能提供了很大便利。由于ASP中已经模糊了变量类型的概念,所以,在进行ASP与vbscript交互的过程中,很多程序员也惯于不声明vbscript的变量,这样加重了服务器的解析负担,进而影响服务器的响应请求速度。

鉴于此,我们可以象在VB中强制用户进行变量声明一样在vbscript中强制用户进行变量声明。实现方法是在ASP程序行首放置<% option explicit%>。

2、对URL地址进行编码

在我们使用asp动态生成一个带参数URL地址并进行跳转时,在IE中解析很正常,但在NetScrape浏览时却有错误如下:

HTTP Error 400 400 Bad Request Due to malformed syntax, the request could not be understood by the server. The client should not repeat the request without modifications.

解决方法是对生成的URL参数使用ASP内置server对象的URLencode方法进行URL编码,例子如下:

<% URL="xur.asp" var1="username=" & server.URLencode("xur") var2="&company=" & server.URLencode("xurstudio") var3="&phone=" & server.URLencode("021-53854336-186") response.redirect URL & "?" & var1 & var2 & var3 %>

3、清空对象

当使用完对象后,首先使用Close方法来释放对象所占用的系统资源;然后设置对象值为“nothing”释放对象占用内存。当年,我就是在一张页面上创建了百余个没有清空对象的记录集而崩溃了我的IIS 。下面的代码使用数据库内容建立一个下拉列表。代码示例如下:

<% myDSN="DSN=xur;uid=xur;pwd=xur" mySQL="select * from authors where AU_ID<100" set conntemp=server.createobject("adodb.connection") conntemp.open myDSN set rstemp=conntemp.execute(mySQL) if rstemp.eof then response.write "数据库为空" response.write mySQL conntemp.close set conntemp=nothing response.end  end if%> <%do until rstemp.eof %> <% rstemp.movenext loop rstemp.close set rstemp=nothing conntemp.close set conntemp=nothing %>

4、使用字符串建立SQL查询

使用字符串来建立查询并不能加快服务器的解析速度,相反,它还会增加服务器的解析时间。但在这里仍然推荐使用字符串代替简单的查询语句来进行查询。这样做的好处是,可以迅速发现程序问题所在,从而便利高效地生成程序。示例如下:

<%mySQL= ""select * " mySQL= mySQL & "from publishers" mySQL= mySQL & "where state='NY'" response.write mySQL set rstemp=conntemp.execute(mySQL) rstemp.close set rstemp=nothing %>

5、使用case进行条件选择

在进行条件选择的时候,尽量使用case语句,避免使用if语句。使用case语句,可以使程序流程化,执行起来也比if语句来的快。示例如下:

<% FOR i = 1 TO 1000 n = i Response.Write AddSuffix(n) & "<br>" NEXT %> <% Function AddSuffix(num) numpart = RIGHT(num,1) Select CASE numpart CASE "1" IF InStr(num,"11") THEN num = num & "th" ELSE num = num & "st" END IF CASE "2" IF InStr(num,"12") THEN num = num & "th" ELSE num = num & "nd" END IF CASE "3" IF InStr(num,"13") THEN num = num & "th" ELSE num = num & "rd" END IF CASE "4" num = num & "th" CASE ELSE num = num & "th" END Select AddSuffix = num END FUNCTION %>

6、使用adovbs.inc文件中定义的常量打开记录集

打开记录集时,可以定义记录集打开的游标类型和锁定类型。

在adovbs.inc文件中定义了一些常量来定义这些类型。adovbs.inc文件保存在\inetpub\iissamples\IISamples目录下面。下面列举几个常用的游标类型和锁定类型。

游标类型:

adOpenFowardOnly游标只能向前; adOpenKeyset游标可向前或者向后,如一用户添加记录,新记录不会出现在记录集中; adOpenDynamic游标动态随意; adOpenStatic记录集不对其他用户造成的记录修改有所反映。

锁定类型:

adLockReadOney不能修改记录集中的记录; adLockPessimistic在编辑一条记录时锁定它; adLockOptimstic调用记录集Update方法时才锁定记录; adLockBatchOpeimstic记录只能成批更新。 <!--#INCLUDE VIRTUAL="/ADOVBS.INC" --> <% connectme="DSN=xur;uid=xur;pwd=xur" sqltemp="select * from publishers where name='xur'" set rstemp=Server.CreateObject("adodb.Recordset") rstemp.open sqltemp, connectme, adOpenStatic,adLockOptimstic response.write rstemp.recordcount & " records in<br>" & sqltemp rstemp.close set rstemp=nothing %>

7、避免在使用global.asa文件中进行对象定义

由于global.asa文件中的内容可以为站点内所有文件引用,无疑,在global.asa文件中进行对象定义可以省去很多重复工作。

比如在global.asa中的application_onstart函数中进行如下定义:

<%SUB application_onstart set application("theCONN")=server.createobject("adodb.connection") END SUB %>;

这样就可以在站点任何代码中做类似引用:

<% mySQL="select * from publishers where state='xur' set rstemp=application("theconn").execute(mySQL) %>

同样地,可以在session_onstart函数中创建记录集对象

<%SUB session_onstart set session("rstemp")=server.createobject("adodb.recordset") END SUB %>

然后在站点也面中进行如下引用:

<% mySQL="select * from publishers where state='xur' set session("rstemp")=conntemp.execute(mySQL) %>

但这样做的同时也有很大的负面影响,由于Application和session变量都只有在关闭网站的时候才释放占用的资源,所以session参数会浪费大量不必要内存,而且此时application变量成为服务器性能的瓶颈。

解决方法:

建立定义对象asp页面,在需要进行调用这些对象的页面上,引入这张asp页面。假设定义对象的asp页面名称为define.asp,则只要在对应asp页面中加入以下语句就能引入该页面。

<!--#INCLUDE VIRTUAL="/define.asp" -->
在进行页面引进时,最好在待引进的asp文件中不要包含<%@LANGUAGE="VBSCRIPT"%>语句。因为在asp文件中,只能有一句由@来定义的脚本解析语言。

8、安全防护

asp提供了很好的代码保护机制,所有的asp代码都在服务器端执行而只返回给客户端代码执行结果。即便这样,在老版本的IIS中还可以在文件名后面家::$DATA来查看asp的源代码,这已经属于Web Server安全范畴不在本文讨论范围内。下面提出两点简单的安全注意事项。

虽然在asp中建议引入文件以inc作为扩展名,在这里仍建议以asp作为引文件的扩展名。当这些代码在安全机制不好的Web Server上运行时,只需在地址栏上输入引入文件的地址(inc为扩展名),就可以浏览该引入文件的内容,这是由于在Web Server上,如果没有定义好解析某类型(比如inc)的动态连接库时,该文件以源码方式显示。

不要把数据库文件放在网站结构内部,这样,当恶意人士获取数据库路径后,就可以轻易获取该数据库,进而肆意更改数据库内容。比较好的做法是,为数据库建立DSN(Date Source Name),而在进行数据库访问时直接访问该DSN。

通过本文关于ASP编码的八条原则介绍,希望能够给你带来帮助。

时间: 2024-09-20 06:32:20

ASP编码必备的8条原则的相关文章

ASP编码必备的8条原则_应用技巧

ASP是Active Server Page的缩写,意为"动态服务器页面".ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.在这里仅就代码优化进行一些简单讨论. 1.声明VBScript变量 在ASP中,对vbscript提供了强劲的支持,能够无缝集成vbscript的函数.方法,这样给扩展ASP的现有功能提供了很大便利.由于ASP中已经模糊了变量类型的概念,所以,在进行ASP与vbscript交互的过程中,很多程序员也

防御XSS的七条原则

 攻击者可以利用XSS漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它.对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问Cookie,或者保存在浏览器里被当前网站所用的敏感信息,甚至可以知道用户电脑安装了哪些软件.这些脚本还可以改写HTML页面,进行钓鱼攻击. 虽然产生XSS漏洞的原因各种各样,对于漏洞的利用也是花样百出,但是如果我们遵循本文提到防御原则,我们依然可以做到防止XSS攻击的发生. 有人可能会问,防御XSS的

快速掌握ASP+Access数据库的18条安全法则

ASP+Access数据库的18条安全法则: 1.首先,我们需要过滤所有客户端提交的内容,其中包括?id=N一类,另外还有提交的html代码中的操作数据库的select及asp文件操作语法,大家可以把提交的字符转义,然后再存入数据库. 2.然后需要对访问Access数据库的页面进行授权,针对显示数据页面只能使用select语句,过滤其他的update,asp文件则分为许可访问数据库页面和限制访问页. 3.修改数库据连接文件名conn.asp为类似123ljuvo345l3kj34534v.asp

防御XSS攻击的七条原则

前言 本文将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:<Stored and Reflected XSS Attack><DOM Based XSS> 攻击者可以利用XSS漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它.对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问Cookie,或者保存在浏览器里被当前网站所用

(转)精益技术简历之道——改善技术简历的47条原则

作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://lucida.me/blog/lean-technical-resume/ 关于 这篇文章围绕着技术简历这个话题,从版式.个人信息.技术能力.项目经历和教育背景等方面出发,给出了编写高质量技术简历所应遵循的47条原则.它们既有益于求职者编写高质量的简历,也有助于招聘者筛选合格的求职者. 为什么要编写这篇文章? 技术简历既是技术人员求职必不可少的一环,也是找工作的第一步,其重要性不言而喻.然而关于如何编

Asp编码优化技巧_应用技巧

8条Asp编码优化技巧: 1.声明VBScript变量      在ASP中,对vbscript提供了强劲的支持,能够无缝集成vbscript的函数.方法,这样给扩展ASP的现有功能提供了很大便利.由于ASP中已经模糊了变量类型的概念,所以,在进行ASP与vbscript交互的过程中,很多程序员也惯于不声明vbscript的变量,这样加重了服务器的解析负担,进而影响服务器的响应请求速度. 鉴于此,我们可以象在VB中强制用户进行变量声明一样在vbscript中强制用户进行变量声明.实现方法是在AS

夏草:总结成功运营个人网站的11条原则

中介交易 SEO诊断 淘宝客 云主机 技术大厅 成功路不同,各有各成就.曾经一句很流行的广告语,道出了成功的人生百态.网站也是一样,有的网站靠做新闻资讯成功,有的网站靠提供交易平台成功,有的网站靠卖产品成功,路是很多条的,但运营一个网站成功犹如做人成功一样,很多原则和道理是相通的.对于大多数网站来说,下面这11条原则都是万变不离其宗的指导方针,值得我们参考. 1.提升团队战斗力 个人的力量很有限,团队的力量会无穷.前面我们提到网站从规划上线到运营成熟稳定需要经历网站策划.技术开发.测试.推广.营

数据仓库设计的21条原则[DMResearch.net]

设计|数据  [为方便自己阅读所以收集整理此处,www.DMResearch.net]   数据仓库设计的21条原则 --7个步骤,7个禁忌和7种思路 高效实现数据仓库的七个步骤 数据仓库和我们常见的RDBMS系统有些亲缘关系,但它又有所不同.如果你没有实施过数据仓库,那么从设定目标到给出设计,从创建数据结构到编写数据分析程序,再到面对挑剔的用户的评估,整个过程都会带给你一种与以往的项目完全不同的体验.一句话,如果你试图以旧有的方式创建数据仓库,那你所面对的不是预算超支就是所建立的数据仓库无法良

设计Logo的12条原则

要从一众竞争者中显得突出,你必须创造独特的风格来显示自己的设计特色,而不是模仿甚至抄袭其它设计或者风格,唯有创新才能脱颖而出. Logo(品牌标识)是品牌的"面子",所以极其重要,一个设计优秀的Logo是品牌的重要资产.然而,仅仅靠优秀的平面设计并不能保证设计出来的logo是令人印象深刻且形象生动的品牌标识. 正如不同的行业有其特定的技能,logo设计也要求设计师不断学习,积累经验才能获得成功:对所有平面设计师来说,知识便是能力. 基于此,我们总结出要设计好的logo必须遵循的12条原