【问题标题】:Storing/serving web-site images securely and efficiently [closed]安全有效地存储/提供网站图像[关闭]
【发布时间】:2012-12-10 04:16:07
【问题描述】:

你好网络开发大师

在不影响性能的情况下安全地存储和提供图像的最佳做法是什么?

是否可以将用户图像存储在无法通过网络访问的文件夹中(可能在 /www 之前的更高位置?)并在用户登录页面后按需提供服务?已有用户名和密码访问机制。

用户不希望这些图像可公开访问。

我在 Ubuntu 上使用 php 运行 nginx。数据库是mysql。

谢谢!

【问题讨论】:

标签: php mysql ubuntu nginx security


【解决方案1】:

您可以使用 php 文件来提供这些图像,并在提供它们之前进行一些检查。我会尝试这样的事情:

<?php
if ( /* YOUR CHECK HERE */ ) {
    header('Content-Type: image/jpeg'); // Or whatever your content type might be
    readfile('/path/to/file');
}

您可以使用 RewriteRule's 使对您的 php 文件的调用看起来像真实图像:

rewrite /img/users/pictures/(.*) /your_php_file.php?path=$1 break;

或者类似的东西。

这可能是安全的,但效率不高,因为您的服务器必须访问两个文件。 php文件和图片文件

【讨论】:

  • 您可以使用readfile 而不是file_get_contents,后跟echo
  • 感谢您更新和 +1
  • 我想你的意思是 RewriteRule 和什么是'break;'为了?
  • 他正在使用 nginx 服务器。所以他需要他的 nginx.conf 的语法
  • 谢谢!基于此处所有有价值的输入,我创建了一个中间文件,例如:&lt;?php $file = basename(urldecode($_GET['file'])); $fileDir = '/image/path/'; if (file_exists($fileDir . $file)) { header('Content-type: image/jpeg'); readfile($fileDir . $file); } ?&gt; 为了安全起见,除此之外,我将图像名称随机化并防止直接访问(仅允许从我的域访问)。此外,我正在使用 nginx 配置文件来“重写”url。我不明白为什么这篇文章被关闭了。感谢您的精彩回复!
【解决方案2】:

也许您应该评估使用像 Amazon S3 这样的 CDN,它通过 RESTful 身份验证提供安全访问:http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html,并避免您的服务器完成提供静态内容的工作。

【讨论】:

    【解决方案3】:

    这取决于您还有什么其他要求。您可能希望让您的用户通过发送链接来共享他们的图像,这样只有拥有此链接的人,即使在您的系统中没有经过身份验证,也可以看到图像。您提议的实施会使这变得困难。

    如果您不太担心可能的“泄漏”,您可以为您的图像生成随机名称,并将所有努力都放在真正的随机性上,这样就很难猜出图像名称是猜密码。一方面,您可以考虑这种“密码保护”,但请记住,您的路径将被缓存在代理、浏览器历史记录等中......所以这可能不是您的解决方案,具体取决于您所保护的资源。

    【讨论】:

      【解决方案4】:

      最有效的方法可能是通过 Apache 重写。当用户登录时,您将一个条目添加到以用户会话 ID 为键的重写映射中。条目的值指向保存图像的目录。您将有一个重写规则,从 cookie 中解析出会话 id 并将 URL 重写到图像目录。实际上,您正在使目录仅对该用户进行网络访问。

      任何涉及 Apache 重写的东西都是伏都教。除非你真的有那种流量,否则不值得这么复杂。通过 PHP 提供文件效率低下,但在许多情况下,效率低下是可以容忍的。

      【讨论】:

        猜你喜欢
        • 2011-01-25
        • 2014-03-26
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2016-05-04
        • 2013-11-06
        • 1970-01-01
        相关资源
        最近更新 更多