【问题标题】:How to stop access to text files?如何停止访问文本文件?
【发布时间】:2016-11-24 17:42:50
【问题描述】:

在我的yii 项目中,我有ChangelogLicence 文本文件。我知道RBAC 并将其应用于每个Controller,但我怎样才能阻止任何来宾用户查看这些文本文件。到目前为止,任何人都可以查看此内容。

我在我的htaccess 文件中使用了这个

<Files ~ "(.txt)">
Order allow, deny
Deny from all
</Files>

但这适用于txt file,这些文件没有extension

【问题讨论】:

  • 大约有多少个文件。您要拒绝访问这些文件以及这些文件是否具有相似的名称?

标签: .htaccess yii


【解决方案1】:

您可以在站点根目录 .htaccess 或 Apache config/vhost 文件中使用此规则阻止对所有没有扩展名的文件的访问:

RewriteEngine On

# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f
# if there is no extension then block
RewriteRule ^[^.]+$ - [F]

【讨论】:

    【解决方案2】:

    你的问题是一个小板,所以答案有点笼统。但有几种方法;

    选项 1. 删除变更日志和许可证文件?如果这些是 yii install changelog 和 license 那么它们不需要留在服务器上。只需确保您遵守许可要求即可。

    选项 2。 您提到了“来宾用户”,对于授权用户,htaccess 不会与 yii 很好地集成。您可以将文件移动到一个包含单行Deny from all 的.htaccess 文件夹中。这会阻止除了在您的服务器上执行的 PHP 之外的所有人。

    您现在可以在控制器中创建一个方法/动作来回显文件内容。 file-get-contentsreadfile。将此您的身份验证包装起来,以便只有非访客用户才能使用该方法。

    如果只有两个静态文件,那么每个静态文件可能只是一个“动作”。如果它的许多文件正在更改名称等,那么您接受控制器的 id 传递给使用 scandir 的模型并检查 file 真的 exists 并吐出您的输出以查看。

    选项 2.1 如果您有此访问权限,您还可以将文件移动到 webhost 基本目录的父级,而不是带有 .htaccess 的文件夹。这意味着您的网络服务器无法提供文件,但 php 仍然可以通过本地路径访问它。

    选项 3 在 .htaccess 中,您可以使用 AuthType basic 并调用您的网络服务器以提示用户输入在 .htaccess 中配置的用户名和密码。这是有问题的,因为界面不是用户友好的,并且很难与您的 webapps 用户数据库集成。

    选项 4 .htaccess 可以支持其他 AuthTypes,但此时选项 2 变得更加容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多