限制直接访问文件夹php

时间:2014-02-03 08:55:46

标签: php authentication

我有这个上传图片的网站。 该内容仅对登录用户可见。 (使用非常简单的基于会话的身份验证) 现在该网站工作正常,但问题是当我通过网址栏直接访问图像文件夹时,所有图像都可用。 我想限制对文件夹的直接访问,因此它会显示一些错误或需要身份验证。 我该怎么办? 谢谢。

4 个答案:

答案 0 :(得分:1)

使用mod_rewrite解决方案,以防止直接访问文件。

您需要为图片重写规则,将其放在图片文件夹中的.htaccess文件中:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.+\.jpg)$ img.php?img=$1 [L]

因此所有jpg请求都将被重定向到img.php脚本,该脚本包含您的逻辑:

<?php
//do your check here
$loggedin = true;
if($loggedin){
    $remoteImage = $_GET["img"];
    $imginfo = getimagesize($remoteImage);
    header("Content-type: ".$imginfo['mime']);
    readfile($remoteImage);
}
else{
    echo "You are not logged in!";
}
?>

如果要添加更多图像类型,请将jpg替换为(jpg | gif | png等)。 PHP脚本应包含一些检查以防止读取其他文件等。

答案 1 :(得分:0)

只需在图像文件夹中放置一个空的index.php,这样就不会通过网络服务器列出这些文件。

答案 2 :(得分:0)

在.htaccess文件中放置以下行

Options -Indexes

答案 3 :(得分:0)

如果要阻止直接访问图像,则必须将图像放在文档根目录之外,或者阻止网络服务器提供该文件夹中的图像。

然后创建一个php文件,检查用户是否已登录并根据参数提供图像。

你可以使用它 或者使用url重写来代理对php脚本的图像调用。

<?php
if($user->check_login()){
    //do some header stuff here like content length and content type
    $image = lookup_image_from_parameter($_REQUEST['image']);
    readfile('path/to/your/image/folder/not/in/webscope/'.$image);
}else{
    die('Access not allowed');
}