PHP – 访问Web根目录之外的文件的安全性

我有一个名为gallery.PHPPHP文件,它是用户特定图像库的页面.为了安全起见,用户图像存储在Web根目录之外.

要为每个用户检索适当的文件,我使用getimage.PHP文件,该文件从其位置提供图像.总而言之,目录结构如下所示:

> UserImages

> User1

> user1的图像列表

>用户2

> user2的图像列表

> public_html

> gallery.PHP
> getimage.PHP

getimage.PHP编写如下:

$imgString = realpath('/UserImages/' . $_SESSION['username'] . '/' . $_GET['img']);
if (!startsWith($imgString, '/UserImages/' . $_SESSION['username'] . '/')
    || !(endsWith(strtolower($imgString), '.jpg') || endsWith(strtolower($imgString), '.jpeg')))
{
    header('HTTP/1.0 403 Forbidden');
    die();
}

$img = file_get_contents($imgString);
header("Content-type: image/jpeg");
echo($img);
exit();

我依靠$_GET [‘img’]来确定要检索的图像,这是一个可能的安全漏洞(也是一个主要漏洞).我可以预见目录遍历攻击,因此使用realpath,虽然我确信可以有其他攻击途径,我不包含此脚本.

出于这个原因,我更喜欢我可以在webroot之外移动getimage.PHP,或者至少阻止它直接访问(并且只能通过gallery.PHP,其中发送的img参数严格在我的控制之下).

每当我尝试移动public_html的getimage.PHP oustide时,即使我在gallery.PHP中执行require或include,我似乎也无法再调用它.我访问getimage.PHP的方式是这样做的:

<img src=getimage.PHP?img=IMG_FILENAME.jpg />

但如果我将它移出public_html目录,getimage.PHP将失败.

所以,长话短说:我需要做些什么才能防止getimage.PHP被滥用?

解决方法:

您需要允许Apache(假设)使用Directory指令(http://httpd.apache.org/docs/2.2/mod/core.html#directory)访问带有图像的文件夹.

或者,您可以在根目录下移动图像,并使用.htaccess限制对它们的直接访问,如果您想保护它们.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...