代码之家  ›  专栏  ›  技术社区  ›  BrynJ

限制授权的PHP用户访问文件

  •  6
  • BrynJ  · 技术社区  · 15 年前

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

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

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

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

    有没有人在执行这种类型的事情或任何好的替代解决方案方面有经验?在这方面我正在努力,非常感谢.htaccess语法的具体示例。

    3 回复  |  直到 14 年前
        1
  •  6
  •   chaos    14 年前

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

    .htaccess如下所示:

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

    然后从中提取剩余的文件路径和名称 $_SERVER['PATH_INFO'] .

        2
  •  3
  •   perrohunter    15 年前

    好吧,您可以为某个文件夹创建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
        }
    ?>
    

    如果你想要更广泛的例子,请告诉我

        3
  •  0
  •   Matt    15 年前

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

    该脚本可以获取图像的Web路径,决定用户是否具有访问权限,然后使用fpassthru之类的工具将实际图像提供给浏览器。

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

    因此,不用/images/123/5423453245.jpg访问图像, 是/image.php吗?图片/123/5423453245.jpg

    或者类似的东西。