php - 有什么办法可以防止用户使用绝对路径看到私密图片吗?

标签 php mysql

想象一下这种情况

  1. 用户上传图片给大家看(图片是公开的)
  2. 用户决定将图片设为私有(private)
  3. 图片只有他能看到,因为图片在数据库中设置为私有(private)。

这里有一个问题:

其他用户仍然可以从图片的绝对路径访问图片。 有什么办法可以避免这种情况吗?

最佳答案

将图像存储在网络根目录之外,并有一个 PHP 脚本来确定当前用户是否有权访问它,如果有则返回图像内容,否则返回 403 禁止错误。


您可以使文件看起来就像您在提供原始图像一样:

http://example.com/images/SunnyTrees.jpg

使用这个.htaccess:

RewriteEngine on
RewriteRule images/(.*) image.php?file=$1 [L]

那么你的image.php可以是:

<?php
$file = $_GET['file'];
// use $file to look up file information, eg. in the database
if( $it_exists && $has_permission_to_view) {
    readfile("/root/path/to/real/images/".$file);
    exit;
}
else header("HTTP/1.1 403 Forbidden");

关于php - 有什么办法可以防止用户使用绝对路径看到私密图片吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23063823/

相关文章:

php - 使用 jquery 刷新动态 php div

php - 我应该为每个项目下载 Laravel 吗?

php - 这个查询迭代是否可能

mysql - 合并两个 select 语句的结果 mysql

MySQL如何在连接中使用相关查询

php - 简单搜索页面 PHP MySQL 全文搜索

php - 有一个 URL 标题来匹配 mysql 查询

php - SQL:获取具有相同ID的所有列记录

php - 如何在多个列中使用相同的变量编写 mysql 准备语句?

php - 将随机名称附加到文件上传