如何安全地引用Web根目录之外的ASP经典包含文件?

时间:2008-11-07 15:22:37

标签: security asp-classic

我希望能够将所有ASP Classic包含文件放在Web根目录之外。这确保不能通过URL直接调用包含文件。

实现这一目标的最佳方法是什么?

我知道我可以使用virtual directory来引用web root之外的includes文件夹,但是它是否仍然允许通过URL直接访问该目录?也许我误解了虚拟目录的本质。

3 个答案:

答案 0 :(得分:2)

来自this article

(我自己永远不需要这样做)

  

解读。创建一个虚拟目录   “在你的默认网站内”   指向你外面的文件'   工作文件夹。在你的代码中   引用那个虚拟目录   指向外面的文件夹/文件   你的正常结构。例如

     

您的默认网站是本地文件夹   叫做c:\ websites \ example.com。下   example.com,你的所有文件夹和   文件。但是,您想要的文件   一个名为FileServerA的文件服务器   名为D:\ MyWebsiteIncludes的文件夹。   UNC路径是   \ FileServerA \ D $ \ MyWebSiteIncludes或   如果您在文件夹上创建共享,   \ FileServerA \ MyWebsiteIncludes On   在Web服务器上,创建一个虚拟的   映射到任一共享的目录   路径。你需要确保   正确的凭据配置为   访问远程服务器上的文件。

答案 1 :(得分:2)

虽然不推荐,但您也可以在IIS中启用“启用父路径”选项,这将允许您通过include指令引用webroot外部的文件,以及允许通过filesystemobject进行访问。但通常不建议这样做,因为它确实存在安全风险。

有关如何执行此操作的说明,请查看Enabling Parent Paths article on MSDN

我使用经典ASP已经有一段时间了,但一般来说,我只在包含文件中声明子程序和函数,然后从主应用程序代码中调用它们。这有意想不到的副作用,如果有人猜测包含的路径并直接通过他们的浏览器访问文件,它实际上不会做任何事情,因为没有代码被执行。

答案 2 :(得分:0)

我能够检查Diodeus' answer中提到的程序,但它确实有效。

示例文件/文件夹设置:

E:\includes\
           \include.asp
           \another.asp
E:\websites\
           \business-website.com\
                                \config.asp
                                \default.asp
           \personal-website.com\
                                \config.asp
                                \default.asp
           \whatever-website.com\
                                \config.asp
                                \default.asp

IIS网站设置

business-website.com -> E:\websites\business-website.com\
     v. dir /include -> E:\includes\
personal-website.com -> E:\websites\personal-website.com\
     v. dir /include -> E:\includes\
whatever-website.com -> E:\websites\whatever-website.com\
     v. dir /include -> E:\includes\

注意:虚拟目录未转换为应用程序。

default.asp

中有效
Files in current directory:
<!-- #include file="config.asp" -->

Files in current directory (using virtual path):
<!-- #include virtual="/config.asp" -->

Files in include directory:
<!-- #include virtual="/include/include.asp" -->

在虚拟包含的include.asp

中有效
Files in current directory:
<!-- #include file="another.asp" -->

Files in current directory (using virtual path):
<!-- #include virtual="/include/another.asp" -->

Files in root application:
<!-- #include virtual="/config.asp" -->

这使得将所有包含文件合并到一个地方变得更加容易。