希望图像只能通过PHP脚本的HTML页面输出访问。Don';我不希望用户通过url访问图像

希望图像只能通过PHP脚本的HTML页面输出访问。Don';我不希望用户通过url访问图像,php,html,image,security,Php,Html,Image,Security,我正在将图像上传到一个公共“上传”文件夹,将文件重命名为MySQL表中文件项的ID。因此,由于ID的顺序越来越高,任何人都可以下载/查看图像(其中一些图像应该只有特定的人才能访问)。但是我不希望任何人能够通过输入URL来访问这些文件 一种方法是将图像上传到公共目录以外的其他位置,然后在PHP脚本中使用每个图像的base64代码进行输出。但这会增加页面加载时间 有什么办法可以解决这个问题?一种方法是使用crypt()函数生成一个哈希并重命名文件,将文件名存储在一个表中。哈希选项可能是最好的。将图像

我正在将图像上传到一个公共“上传”文件夹,将文件重命名为MySQL表中文件项的ID。因此,由于ID的顺序越来越高,任何人都可以下载/查看图像(其中一些图像应该只有特定的人才能访问)。但是我不希望任何人能够通过输入URL来访问这些文件

一种方法是将图像上传到公共目录以外的其他位置,然后在PHP脚本中使用每个图像的base64代码进行输出。但这会增加页面加载时间


有什么办法可以解决这个问题?一种方法是使用crypt()函数生成一个哈希并重命名文件,将文件名存储在一个表中。

哈希选项可能是最好的。将图像按其DB id存储在文档根目录之外的某个位置,以防止直接访问。然后,图像查看脚本将具有以下内容:

<?php
$hash = $_GET['id'];
$info = get_image_metadata_from_database($hash); // look up ID, mime type, etc..
if ($info === false) {
    readfile('/path/to/image/with/errortext.jpg'); // invalid hash, non-existent img, etc...
}
header('Content-type: ' . $info['mime']);
readfile('/path/to/image/storage/ . $info['filename']);

将图像放在一个私有文件夹中,然后编写一个输出图像的php脚本。您可以向该脚本传递一个不可猜测的ID。您可以在这里看到一个示例:将图像从www根目录中取出并写入处理程序,该处理程序将为它们提供设置正确的标题和检查权限的服务。最好的方法是使用PHP加载图像,然后使用图像标题将其输出。这将单独增加您的流量,因为没有缓存可以启动。实现HTTP头检测和适当的响应应该会有所帮助-这是想要“保护”你的图片的缺点。一旦页面加载,用户将能够下载图片,对吗?我需要他们能够从页面下载图像。