Hello web development gurus
在不影响性能的情况下,安全存储和提供图像的最佳做法是什么?
是否可以将用户图像存储在不可访问Web的文件夹中(可能更高版本和之前/ www?)并在用户登录页面后按需提供服务?已有用户名和密码访问机制。
用户不希望这些图像可公开访问。
我在Ubuntu上使用php运行nginx。数据库是mysql。
谢谢!
答案 0 :(得分:1)
您可以使用php文件来提供这些图像,并在提供之前进行一些检查。我会尝试这样的事情:
<?php
if ( /* YOUR CHECK HERE */ ) {
header('Content-Type: image/jpeg'); // Or whatever your content type might be
readfile('/path/to/file');
}
你可以使用RewriteRule来调用你的php文件看起来像真实的图像:
rewrite /img/users/pictures/(.*) /your_php_file.php?path=$1 break;
或类似的东西。
这可能是安全的,但效率不高,因为您的服务器必须访问两个文件。 php文件和图像文件
答案 1 :(得分:0)
也许您应该评估像Amazon S3这样的CDN的使用,它通过RESTful身份验证提供安全访问:http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html并避免服务器执行服务静态内容的工作。
答案 2 :(得分:0)
执行类似操作的最有效方法可能是通过Apache重写。当用户登录时,您可以向键入用户会话ID的重写映射添加条目。条目的值指向包含图像的目录。您将有一个重写规则,从cookie中解析出会话ID,并将URL重写到映像目录。那么,有效的是,您只对该用户进行目录Web访问。
涉及Apache重写的任何内容都是伏都教。除非你真的有那种流量,否则不值得复杂。通过PHP提供文件效率很低,但在许多情况下效率低下是可以容忍的。
答案 3 :(得分:0)
这取决于您有什么其他要求。您可能希望通过发送链接让您的用户共享其图像,以便只有拥有此链接的人(甚至未在您的系统中进行身份验证)才能看到图像。你提议的实施会使这很困难。
如果你不太关心可能的“泄漏”,你可以为你的图像生成随机名称,并将所有的努力都放在这个真正的随机性中,这样就很难猜到一个图像名称。猜猜密码。一方面,您可以考虑使用“密码保护”,但请记住,您的路径将缓存在代理,浏览器历史记录等中......因此,根据您保护的资源,这可能不适合您。< / p>