【问题标题】:Protect images from direct URL access?保护图像免受直接 URL 访问?
【发布时间】:2016-06-23 12:29:31
【问题描述】:

我目前正在开发一个使用 php、apache 服务器和 symfony 的项目。我试图实现的是防止我的图像直接在 URL 栏中通过http://localhost:8000/img/logoSmall.png 访问。我已经尝试过使用Option All -Indexes,但它不起作用,我不知道我是否做错了什么,我还尝试了this帖子中的一些东西,例如:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg|png)$ - [F]

改变

Options Includes Indexes FollowSymLinks MultiViews

Options Includes FollowSymLinks MultiViews

我也确定我的 httpd.conf 文件有 AllowOverride All

我真的不知道还能做什么。我已经被困在这太久了,如果您在我的解决方案中发现任何错误,或者您有任何建议,我会非常感谢他们。提前致谢。

编辑

我确实想继续在我的网站中显示图像,但我不希望允许其他用户使用直接 URL 访问它们。

【问题讨论】:

  • 您想阻止对文件的访问,还是仅在从 URL 栏直接访问文件时阻止访问?抱歉,我在回答中假设前者。
  • 没有可靠的方法来做到这一点。不值得打扰
  • 好吧,你可以用我的回答完全阻止访问。我假设 OP 将使用 PHP 或其他东西将文件加载到数据 URI 中,因此永远不会使用图像的可能 URL。

标签: apache .htaccess hotlinking


【解决方案1】:

我遇到了类似的问题,但在我的情况下,我为用户上传的文件(个人资料图片等)使用了一些文件夹(上传),然后我只需要为某些用户(帐户所有者及其联系人)显示这些文件。

我的解决方案: 1) 在 security.yml 中关闭除超级管理员以外的所有用户的上传文件夹

security:
   access_control:
       - { path: ^/uploads/, role: ROLE_SUPER_ADMIN }

2) 如果您需要用户能够从服务器下载文件,请创建控制器来处理此问题

use Symfony\Component\HttpFoundation\BinaryFileResponse;

class DownloadController extends Controller
{
    public function downloadAction(Request $request, $filepath = null)
    {
        if ($filepath){
            $response = new BinaryFileResponse($filepath);

            return $response;
        }
    }
}

【讨论】:

  • 我也在做同样的事情,但我的网址是公开的,未经授权的用户可以看到图片
  • 检查您的 security.yaml 并确保您的控制器位于启用了安全性的防火墙后面。通往您的 downloadAction 的路径是什么?
【解决方案2】:

apache2.conf 中(至少这是我测试过的):

<FilesMatch "\.(gif|jpg|png)$">
    Require all denied
</FilesMatch>

注意:这将阻止从 HTML 文件中访问文件。它们可以显示在页面上的唯一方法是将它们包含在 HTML 中,并在您的 PHP 中生成 data URIs

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2020-02-25
    相关资源
    最近更新 更多