include文件的利弊及其安全性

include|安全|安全性|include|安全|安全性

Include的利弊何在?
你知道Include 可以包含文件自身吗?是的。你甚至可以包含几次。唯一的限制是:你不能让A包含B,而B又包含A。这样的循环包含是不允许的。

另一个问题是,那些文件可以包含其他文件呢?实际上,通过设置IIS,你可以允许任何文件类型使用SSI。缺省地, .shtm,.shtml,.asp,.stm是可以使用Include的。

我们来看看如何使某种文件类型使用Include。在Internet管理器中,调出站点的属性对话框,选择MIME类型下的文件类型按钮,执行“新建类型”,假设新建类型为:.dark。下面只需要把.dark文件类型和SSInc.dll关联就可以了。关联的意义在于:每次客户访问.dark文件类型时,先执行服务器端的Include指令。

关联的方法是:在站点的属性对话框中,选择“主目录”,选择“应用程序映射”,然后增加一个映射:.dark和SSInc.dll

要注意的是,使用了Include的文件必须允许“执行脚本”或者“执行”权限。而如果你不需要在某种类型的文件里面使用包含,那么,简单地删除相应的应用程序映射就可以了。

关于使用Include的好处,我们在“什么是Include”一文里已经讲了。如果你赞成下面的观点,那么,Include的好处是显而易见的:

第一:代码量越大,bug越多!大的代码量意味着开发周期长,意味着投入增加。
第二:某段代码被重用的次数越多,bug越少!那些你现在还在使用的老的代码往往是Bug Free的。

使用Include恰恰允许我们写尽量少的代码,尽量重用代码。所以,Include是值得的。

关于Include文件的命名
微软推荐我们给每一个Include文件带一个.Inc后缀,以便于区别正常的ASP和HTML文件。但是,很多专家建议不要给Include文件一个.Inc,因为这可能带来安全性问题。当黑客知道了或者猜测到你的Include文件的名称,它可以从你的站点Download到你的源程序!有时候,这个问题很严重,特别是Include文件里面包含数据库的用户名和密码,或者数据库的连接字符串时候!

所以,最好你还是给包含文件一个看起来很正常的名称,比如.ASP。当黑客取这个文件时,就看不到源程序了。如果你确实要区分正常的文件和包含文件,你可以把包含文件放进一个不同的路径。

Include存在哪些安全性问题?
网上有很多讨论Include安全性的文章。本文分析Include为什么会带来安全性问题,怎样预防。

你可能类似于下面的代码存储在一个叫Db.inc的文件中:
<%
Dim objConn
Set objConn = Server.CreateObject("ADODB.Conection")

objConn.ConnectionString = "DRIVER={Microsoft Access (*.mdb)};" & _
"DBQ=" & Server.MapPath("/MyDatabase.mdb")
objConn.Open
%>

你可以试试从浏览器上去拖这个文件:http://localhost/db.inc
你会很惊讶:源程序已经显示在浏览器上。如果显示不出来,你也可以通过查看浏览器的源代码看到!也许你会说:我这个Include文件名称很特别,别人是猜测不出来的。呵呵,真的么?如果你的某个页面有错误,比如下面的错误信息出现了:
Microsoft VBScript runtime error '800a004'

Invalid Class String

/db.inc, line 3

或者这样的错误:
Microsoft VBScript runtime error '800a004c' 路径没有找到.
/db.inc, line 94

你的Include文件名称就暴露无疑!(你可以在Internet管理器中设置一下,不要把详细的错误信息显示到浏览器上)。

解决办法:
1、 Include文件的后缀取成:.asp
2、 所有Include文件放进同一个目录,并禁止这个目录的“读“权限。

时间: 2024-08-29 13:26:14

include文件的利弊及其安全性的相关文章

浅谈php中include文件变量作用域

本文给大家总结了php中include文件时的几种情况下的作用域,十分的简单实用,希望对大家熟悉include的使用能够有所帮助. 在php中我们有时候需要include一个文件.比如我前段时间在写一个框架的时候,打算用原生的php作为模板,然后写一个display方法引入模板文件就可以,但是这只是我的意淫而已. 写完后发现在模板中所有的变量都提示未定义.通过各种研究和查找资料,总结了include文件时的几种情况下的作用域. 第一种情况:A文件include B文件,在B文件中可以调用A中的变

php动态Include文件 (Dynamic File Includes)源代码

动态|源代码|include 相信很多ASP开发者都会抱怨ASP的Include方式太老土了,以的方式加载文件实在是太不舒服了,在实际项目中不管我是不是一开始就要用到这个文件,我总得早早的把它Include进来...这方面PHP就舒服很多...什么时候用,什么时候In... 早在03年就在蓝色理想上看到过动态Include的文章,当时已经觉得很厉害,但实际应用了一下,不方便而且Include的效果不好. 后来又在一网站上看到了改进版的,但是也不太好用~~~ 哎,当时我真是觉得有点想放弃ASP了,

asp如何动态include文件

必须存在该文件并且会预先编译(不管前面是否加以条件) 经常有这样的要求,根据不同的需求要求include不同的文件 如各个人的不同设置,所以要求能动态include文件. 代码如下:   <%   Function include(filename)       Dim re,content,fso,f,aspStart,aspEnd       set fso=CreateObject("Scripting.FileSystemObject")       set f=fso.

关于动态Include文件的讨论

include|动态 我们从一个案例谈起: <% '得到用户所在的省份 Dim Province Province = Request.form("Province") '下面显示这个省份相关的信息 %> <!--#include virtual="/ Province/<%= Province%>"-->  你觉得上面的代码可以工作吗?不!简单地使用ASP来达到动态包含,你不能达到你想要的效果.为什么?因为:Include命令先

asp动态include文件

include|动态 受<! #include file="filename.asp" --> 宏限制必须存在该文件并且会预先编译(不管前面是否加以条件) 经常有这样的要求,根据不同的需求要求include不同的文件如各个人的不同设置,所以要求能动态include文件. 代码如下: Function include(filename) Dim re,content,fso,f,aspStart,aspEnd set fso=CreateObject("Script

ASP中动态include文件代码实例

include|动态 受<! #include file="filename.asp" --> 宏限制,必须存在该文件并且会预先编译(不管前面是否加以条件).经常有这样的要求,根据不同的需求要求include不同的文件,如各个人的不同设置,所以要求能动态include文件.     代码如下: Function include(filename)  Dim re,content,fso,f,aspStart,aspEnd  set fso=CreateObject(&quo

ASP中动态include文件

include|动态 受<! #include file="filename.asp" --> 宏限制,必须存在该文件并且会预先编译(不管前面是否加以条件).经常有这样的要求,根据不同的需求要求include不同的文件,如各个人的不同设置,所以要求能动态include文件.     代码如下: Function include(filename)  Dim re,content,fso,f,aspStart,aspEnd  set fso=CreateObject(&quo

asp可以动态Include文件吗?

include|动态 可以动态Include文件吗? 2001年4月23日 什么是动态Include? 解答 我们从一个案例谈起: <% '得到用户所在的省份 Dim Province Province = Request.form("Province") '下面显示这个省份相关的信息 %> <!--#include virtual="/ Province/<%= Province%>"--> 你觉得上面的代码可以工作吗?不!简单

动态Include文件的讨论

include|动态 我们从一个案例谈起: <% '得到用户所在的省份 Dim Province Province = Request.form("Province") '下面显示这个省份相关的信息 %> <!--#include virtual="/ Province/<%= Province%>"--> 你觉得上面的代码可以工作吗?不!简单地使用ASP来达到动态包含,你不能达到你想要的效果.为什么?因为:Include命令先于