【发布时间】:2009-03-03 20:47:50
【问题描述】:
我正在创建一个您必须登录才能访问的图片库网站。该站点将使用会话来跟踪用户名和密码。登录的用户将能够搜索图像并查看结果。据推测,这意味着我将把图像放在网络目录中。如何让未登录的人无法直接浏览此目录中的图像?
这是基于 PHP 的,带有 MySQL。
【问题讨论】:
标签: security permissions
我正在创建一个您必须登录才能访问的图片库网站。该站点将使用会话来跟踪用户名和密码。登录的用户将能够搜索图像并查看结果。据推测,这意味着我将把图像放在网络目录中。如何让未登录的人无法直接浏览此目录中的图像?
这是基于 PHP 的,带有 MySQL。
【问题讨论】:
标签: security permissions
检查引荐来源标头,并要求它来自您的网站。 您还可以检查 cookie 是否已发送给您(他们已登录)。
您最好的选择是让 PHP 从您的网络目录之外的位置获取图像。
另外,查看注释字符串:使用 mod_rewrite 可以直接从 apache 完成所有这些操作。
【讨论】:
将图片放在无法通过直接 URL 访问的文件夹中,并让程序直接提供图片
【讨论】:
不要将图像放在可浏览的目录中。更好的是,将它们存储在您的 webroot 之外。在用户经过验证和验证后,放置某种自定义处理程序将加载请求的图像并将其发送回用户。这也将防止您的图像的热链接。
【讨论】:
将图片放在网站外部的文件夹中,并使用代理页面将图片发送到浏览器。在 img 标签中创建一个用作 url 的页面,例如:
getimage.php?id=8783475
在页面中,您检查用户是否已登录,并根据参数确定要发送什么图像。将页面的内容类型设置为与图片匹配的类型,例如“image/jpeg”,读取图片文件直接发送到响应流。
【讨论】:
如果您的图片不是太大,有一种非常聪明的方法可以保护它们免受未经授权的访问。 您可以使用 base64 编码,与 Outlook Express 附件编码相同,并将代码放在使用 SESSION 对象的 ASP 页面中。有关此主题的更多信息,请参阅 ASP 教程。 当用户访问该页面时,asp 代码会检查用户是否已通过身份验证。如果他不是,脚本会中断页面代码,而不是可视化图像。 如果用户通过身份验证,则脚本会加载整个页面,并将 base64 重建为可见图像。 这里的技巧是您没有包含纯图像的目录,但是图像在页面 html 中编码,因此它是由脚本动态重建的。 由于目录中没有图像,因此没有人可以尝试将浏览器直接指向它们,因为它们根本不存在。 您可以使用此站点对图像进行编码:
http://www.motobit.com/util/base64-decoder-encoder.asp
然后你必须使用这个标签在 html 代码中“调用”图像:
img src="data:image/gif;base64, .................... ............(这里放置从上面网站获得的代码)......
你已经完成了!如果用户未登录,则无法访问您的图像。
【讨论】:
不要让别人直接访问你的图片目录。
让您的图片库软件将图片转发给用户。检查所需的凭据。
【讨论】: