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

如何避免在运行php的Apache Server中向公众显示未经授权的资源?

  •  0
  • DNB5brims  · 技术社区  · 13 年前

    好吧,问题来了,用户上传一张图片,然后只为该用户设置图片,比如脸书:

    enter image description here

    但是,当我复制url并发送给其他人时:

    https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash3/48062_4848804102040_906119890_n.jpg

    其他人仍然可以访问该图像。所以,这并不是真的 Only Me 可以访问图片,在Facebook的情况下。所以,如果我的图像或文件真的很重要,我可能会泄露信息。那么,我该如何避免这种情况呢?谢谢

    2 回复  |  直到 13 年前
        1
  •  0
  •   Teson    13 年前

    简单的方法:在会话中使用php来存储图像 外部的 公共目录,并使用php脚本获取图像,同时验证用户。

    **getimg.php**
    session_start();
    if ($_SESSION['okToViewImage']) {
      $fn = $_GET['fn'];
      $type = explode('.',$fn);
      header('content-type: image/' . $fn[1]); 
      echo file_get_contents('dirOutsideWWWpubScope/'. $fn);
    }
    
        2
  •  0
  •   Quentin    13 年前

    脸书需要身份验证(他们检查你的用户名和密码)和授权(他们检查图片是否公开,或者图片是给朋友的朋友的,而你是朋友的朋友,等等),然后他们才会给你图片链接。

    为了避免您所描述的情况,您需要在提供图像之前执行与提供URL之前相同的auth/authz。

    在PHP领域,通常通过将图像存储在webroot之外,然后仅通过PHP脚本(执行auth/authz,设置适当的内容类型头,然后读取图像的字节并将其输出到服务器以传递给浏览器)来实现对图像的包括这种保护。