欢迎光临
我们一直在努力

ASP精华文摘-002

建站超值云服务器,限时71元/月

转贴-给asp程序多一点点安全感 (2000.03.28)

给asp程序多一点点安全感

# 使用 on error resume next

这一行语句等于告诉服务器处理程序:"如果我出错了,呵

呵不要管我,继续……”。这样做可以使你捕捉到很多可以

捕捉和处理的错误,比那些一出错就把家底拿给人家看的代

码好一些。调试的时候最好不要打开,一面无法发现哪里出

错了。

# 服务器iis设置成出错后显示"处理 url 时服务器上出错。

请和系统管理员联络。”(在应用程序配置中设置)

可以避免出错后透露细节给访问者,你的秘密就不用担心从

出错信息中透露出去了。

# 检查传递的参数合法性

这一点十分重要,根据我的测试,国内很多站点上的 asp

程序如果改变了它的参数的值,一般都会出错。检查合法性

就可以明显的降低出错概率。具体的方法这里不再叙述。

# 尽量少用 get 方式传递参数

从最基本的一点上讲,这种方式要比 post 方式多传输一些

字节的 url 给服务器,所占用的系统资源也会相应增加。

从安全性的角度来看也是很有好处的,可以减少命令行式的

攻击。

# 少用中文文件名

可能你觉得用中文文件名比较爽,可是从专业的角度来看,

这样做存在着很多弊端。手工敲地址时变得繁琐起来;调试

中需要输入文件名的地方还得打开输入法或者拷贝粘贴文件

名;本身就不够专业啦 😉

======================================================================转贴-解决主页中asp中文乱码(2000.03.27)

解决主页中asp中文乱码

: 在做内有vbscript的asp homepage时,一个form提交方法为get,

: 当form的表单传给asp处理时,入…asp?name="张三"

: 可张三的中文已经乱码,请问如何在asp中用vbscript将乱码恢复成

: 正确的中文.

: …….

对文字进行如下cut()过程即可

<script language=vbscript runat=server>

function cut(str)

length = len(str)

count = 1

do while count <= length

if strcomp(mid(str,count,1),"z",1) > 0 then

length = length -1

end if

count = count + 1

loop

cut = left(str,length)

if session("version")<>3 then 若为高版本asp则不需处理

cut = str

end if

end function

</script>

======================================================================转贴-尽可能的使用本地(局部)变量 (2000.03.24)

尽可能的使用本地(局部)变量

局部变量是在子程序和函数中定义的(也就是常说局部范围的变量),这些变量

被编译成数字指向并放入一张表中。这些局部变量的指向可以通过一次编译完成。

而全局变量则是在运行时被执行的。这就意味着局部变量的存取要比全局变量快

好几倍。而且,多维全局变量是其中最慢的,当第一次使用一个多维全局变量时,

在新的对象产生之前,就要在整个对象模型中搜索一遍同名的对象。

以下是一个非常常见的例子:

foo.bar.blah.baz = foo.bar.blah.qaz(1)

if foo.bar.blah.zaq = foo.bar.blah.abc then

运行时产生如下结果:

1)变量foo被定义为一个全局变量

2)变量bar被定义为foo的一个成员

3)变量blah被定义为foo.bar的一个成员

4)变量qaz被定义为foo.bar.blah的一个成员

5)调用 foo.bar.blah.quaz(1)

6)重复1至3。系统并不知道如果调用qaz改变了对象模型1-3步必须重新执行

7)定义baz为 foo.bar.blah的成员,输出值

8)重复1-3,执行zaq

9)重复1-3,执行abc

正如你看到的,效率极其低下,最快的方法就是把这些代码写在vbscript中:

set myobj = foo.bar.blah do the resolution of blah once

myobj.baz = myobj.qaz(1)

if myobj.zaq = myobj.abc then

======================================================================转贴-正确使用global.asa (2000.03.23)

正确使用global.asa是asp开发者的一个共同问题。最主要的是要知道什么时候该用

virtual application,什么时候该用virtual directory,并且知道他们的不同。

virtual directories(虚拟目录)

简而言之,virtual directories是虚拟出来的,不一定跟web root在同一个的目

录上,可以是其他的。但是你可以像使用web root上的其他目录一样使用它。当

运行global.asa以后,asp就把所有的虚拟目录看成是应用程序根目录上的子目录。

值得注意,如果你的目录已经是website root上的一个物理目录,那就没有必要

再去为那个目录做虚拟目录了。当然,你有也可以这样做。如果你的目录的路径

实在是太长,长到你无法忍受,想它短一点。你可以用建虚拟目录的方法。使它

短些,容易记住。例如:原来的目录http://mysite.com/directory1/directory

2/file.asp,你可以为它建一个虚拟的目录,http://mysite.com/directory2/fi

le.asp。这样就方便多了了。

virtual applications(虚拟应用程序)

virtual applications 是一个独立于website的web applications,而它跟virtual

directories一样,不一定是web root上的一个目录。可以是从其他的目录虚

拟出来的。asp不允许应用程序共享他们的application和session变量,换句话说,

就是应用程序a不能访问应用程序b(包括web root,因为web root也是看作一个

应用程序的根。)的application和session变量,他们是私有的。反之亦然。当你

确信这个应用程序不需要与整个website、website上其他子目录上的asp脚本共享

application和session变量,或者你想在同样的内存空间里隔离一个进程来运行

应用程序时。你使用virtual applications是正确的。

要注意的一点是:在iis 4.0里面的"新虚拟目录向导” 所建立的virtual directory

(虚拟目录)缺省就是一个virtual application(虚拟应用程序)。要把它变回

virtual directory的话,你可以在目录的"属性”里,选择"目录”标签,单击"卸载”。

小心使用多个 global.asa

在一个website里面使用多个global.asa,我们必须要注意,因为那是很容易导致

变量超出范围而丢失的。通常我们必须限制在整个website上的global.asa的树木,

在每一个应用程序的的根目录里面放一个。这是保持session和application变

量比较好的方法,不至于它们会丢失。通过在各个目录上放置global.asa文件,

我测试的asp文件,可以帮助我们理解它们的关系。

例子,下面是一个website的设置。在这个website下面有两个目录。一个virtual

application(虚拟应用程序)叫admin,一个virtual directory(虚拟目录)叫

images。在每一个目录下有2个文件:global.asa和default.asp。每一个目录里的

default.asp都是一样的,global.asa则根据不同的目录有所改变。

这个是default.asp的内容:

<%

response.write "session application_directory = <b>" &

session("application_directory") & "</b><br>"

response.write "session virtual_directory = <b>" &

session("virtual_directory") & "</b><br>"

response.write "session directory = <b>" & session("directory") & "<

/b><br>"

%>

website root上global.asa的内容:

sub session_onstart

session("virtual_directory") = "executed"

session("directory") = "executed"

end sub

当你用浏览器浏览default.asp时,得到的结果是:

session application_directory =

session virtual_directory = executed

session directory = executed

virtual directory(虚拟目录) images 上global.asa的内容是(把website root

上的global.asa稍微做修改):

sub session_onstart

session("virtual_directory") = "virtual directory"

session("directory") = "virtual directory"

end sub

用浏览器浏览default.asp(images上的default.asp)时,得到的结果是:

session application_directory =

session virtual_directory = executed

session directory = executed

虽然在这个目录上的global.asa文件里,我们为session变量赋了新的值。但是显

示的仍然是website root上global.asa所设的值。

virtual application(虚拟应用程序) admin 上 global.asa的内容:

sub session_onstart

session("application_directory") = "executed"

end sub

用浏览器浏览default.asp(admin上的default.asp)时,得到的结果是:

session application_directory = executed

session virtual_directory =

session directory =

正如你所看到的,session("virtual_directory")和session("directory") 的值

不能从root web 那里"带”过来。

global.asa 参考

global.asa 文件是一个可选文件,用户可以在该文件中指定事件脚本,并声明具

有会话和应用程序作用域的对象。该文件的内容给用户显示的,而是用来存储事

件信息和由应用程序全局使用的对象。该文件的名称必须是 global.asa 且必须

存放在应用程序的根目录中。每个应用程序只能有一个 global.asa 文件。

global.asa 文件只能包含如下内容:

用程序事件(application_onstart、application_onend)

会话事件(session_onstart、session_onend)

<object> 声明

typelibrary 声明

如果包含的脚本没有用 <script> 标记封装,或定义的对象没有会话或应用程序

作用域,则服务器将返回错误。服务器会忽略已标记的但未被应用程序或会话事

件使用的脚本以及文件中的 html 语句。

可以用任何支持脚本的语言编写 global.asa 文件中包含的脚本。如果多个事件

使用同一种脚本语言,就可以将它们组织在一组 <script> 标记中。

当用户保存对 global.asa 文件所做的更改时,在重新编译 global.asa 文件之

前,服务器会结束处理当前应用程序的所有请求。在此期间,服务器拒绝其他请

求并返回一个错误消息,说明正在重启动应用程序,不能处理请求。

当用户当前的所有请求处理完之后,服务器对每个会话调用 session_onend 事件,

删除所有活动会话,并调用 application_onend 事件关闭应用程序,然后编译

global.asa 文件。接下来,用户的请求将启动应用程序并创建新的会话,触发

application_onstart 和 session_onstart 事件。

但是,保存 global.asa 文件中所包含的文件的更改并不能使服务器重新编译

global.asa。为了让服务器识别包含文件的改动,必须再保存一下global.asa

文件。

在global.asa 文件中声明的过程只能从一个或多个与 application_onstart、

application_onend、session_onstart 和 session_onend 事件相关的脚本中调用。

在基于asp的应用程序中的 asp 页中,它们是不可用的。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP精华文摘-002
分享到: 更多 (0)