繁体   English   中英

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

[英]How do I securely reference ASP classic include files outside of web root?

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

完成此任务的最佳方法是什么?

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

这篇文章

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

了解。 在默认网站“内部”创建一个虚拟目录,指向工作文件夹“外部”的文件。 在您的代码中引用指向正常结构之外的文件夹/文件的虚拟目录。 例如

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

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

有关如何执行此操作的说明,请查看MSDN上的“ 启用父路径”一文

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

我能够检查Diodeus回答中提到的程序,它确实有效。

示例文件/文件夹设置:

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" -->

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM