如何拒绝直接访问网站文件但允许网站文件通过包含'file.php'相互访问?

Posted

技术标签:

【中文标题】如何拒绝直接访问网站文件但允许网站文件通过包含\'file.php\'相互访问?【英文标题】:How to deny direct access to website files but allow website files to access each other by include 'file.php'?如何拒绝直接访问网站文件但允许网站文件通过包含'file.php'相互访问? 【发布时间】:2018-12-29 04:38:11 【问题描述】:

如果来自外部的用户想要使用 url 打开网站文件但允许网站文件通过在 php 文件中包含“file.php”来相互访问,如何拒绝对网站文件的直接访问。

我有一个 .htaccess 文件。我可以这样做吗?

【问题讨论】:

【参考方案1】:

您可以通过将 PHP 文件放在您的 webroot 之外来做到这一点。您实际需要访问的脚本需要位于您的 webroot 中或下方。现在,您通常会看到具有如下结构的 PHP 项目:

/projectname
            /app
            /src
            /web

使用 composer 进行依赖/组件库管理是当今最先进的技术,如果您使用它,它将创建其他目录,如供应商。

因此,您的前端控制器或其他 Web 可访问脚本进入 projectname/web,这就是您将 webroot 设置为的内容。

您的其他脚本进入 /projectname/src。

您的 include/require 语句需要一个文件系统路径,因此您可以通过相对寻址或使用完整路径来引用它们。

通常人们会有一个引导包含或使用一个前端控制器(一切都通过 index.php)来设置包含路径。对于组件库,您还希望实例化您的类加载器以解析您可能在项目中使用的任何库。

再次强烈推荐使用 composer,它会为你生成你的类加载器,然后只需确保它被包含。

【讨论】:

【参考方案2】:

这个 .htaccess 文件只允许用户打开 index.php。尝试访问任何其他文件将导致 403 错误。

订单拒绝,允许 全部拒绝

<Files "index.php">
    Allow from all
</Files>

如果您还想对某些文件使用身份验证,您只需在我的示例末尾添加当前文件中的内容即可。

【讨论】:

以上是关于如何拒绝直接访问网站文件但允许网站文件通过包含'file.php'相互访问?的主要内容,如果未能解决你的问题,请参考以下文章

iis上部署asp.net网站,访问上传的文件时被拒绝

IP-Guard如何实现允许访问指定网站,但不能往该网站上传文件?

拒绝对 WAMP 文件夹中所有文件的直接访问(下载)

阻止直接访问文件,但允许通过 jquery 加载函数访问

保护子文件夹不受直接访问,但允许系统访问

尽管政策允许我的站点引荐来源网址,但 S3 存储桶上的 copyObject 访问被拒绝