限制对授权的php用户的文件访问权限

时间:2009-04-10 18:48:08

标签: php security session .htaccess file

我继承了一个带有明显安全漏洞的应用程序。

它具有基于会话的安全性,但文件上传(用户特定的)不以任何方式受到保护,并且它们存储在公共文件树中。

文件名不遵循任何惯例,因此难以猜测,但数据很敏感,因此我需要实施安全措施以防止未经授权的文件访问。

移动文件的位置实际上不是一个选项,所以我正在寻找一个htaccess解决方案来将请求转发到php处理程序脚本。

有没有人有实施这类东西或任何好的替代解决方案的经验? .htaccess语法的具体例子非常受欢迎,因为我在这方面苦苦挣扎。

3 个答案:

答案 0 :(得分:6)

不要真正理解为什么移动它们不是一种选择,因为将它们的请求推送到处理程序意味着它们不再重要存储它们。但你是现场的那个人。

.htaccess看起来像:

RewriteEngine on
RewriteRule path/to/where/these/files/live/(.*) /handlerscript.php/$1

然后从$_SERVER['PATH_INFO']中选择剩余的文件路径和名称。

答案 1 :(得分:3)

好吧,你可以为某个文件夹制作apache parse .jpg文件,将以下内容添加到.htaccess

AddHandler php5-cgi .jpg

然后你可以设置一个php文件来解析请求的方式,就像混沌推荐你并进行某种验证一样,然后只返回jpeg标题以及你想要显示的正确图片

这是一个例子

<?php
if($validUser)
    {
    header("Cache-control: No-cache");
    header("Pragma: No-cache");
    header("Content-Type: image/jpeg");
    //correct picture address
    $img = imagecreatefromjpeg("2326_b_lil.jpg");
    imagejpeg($img);
    }
    else
    {
    //code for error image
    }
?>

如果您想要更广泛的示例,请告诉我

答案 2 :(得分:0)

我认为您可能需要编写一个将为图像提供服务的脚本,然后使用htaccess完全限制从浏览器访问实际图像。

脚本可以接收图像的Web路径,确定用户是否具有访问权限,然后使用fpassthru等内容将实际图像提供给浏览器。

然而,需要修改对图像的所有引用,以引用服务脚本。

所以不要使用/images/123/5423453245.jpg访问图像, 它将是/image.php?images/123/5423453245.jpg

或类似的东西。