仅将PHP脚本限制在其目录和子目录中

问题描述 投票:0回答:1

我正在建立一个带有一些图片库的网站。我想做尽可能少的后端。我将图像分成文件夹。我有一个PHP脚本,可获取由get参数指定的目录的内容。 fetchFiles.php?dir=./art。 Javascript在此处发送抓取操作,并返回图像文件名的JSON数组,并创建src为的图像。我想拥有它,以便PHP只能访问正在执行脚本的目录中的内容,从而使某人无法访问服务器上的所有目录。

fetchFiles.php

<?php
    echo json_encode(
        array_values(
            array_diff(
                scandir($_GET['dir'], SCANDIR_SORT_ASCENDING),
                array('.', '..', 'fetchFiles.php')
            )
        )
    );
?>
javascript php security frontend directory-traversal
1个回答
0
投票
不是让用户决定您的PHP应该进入哪个目录,而是让PHP决定了它应该寻找哪个目录。

而不是:

scandir($_GET['dir'], SCANDIR_SORT_ASCENDING);

执行此操作:

const PICTURES_DIR = '/path/to/pictures/';
scandir(PICTURES_DIR, SCANDIR_SORT_ASCENDING);

如果您必须让用户提供部分输入内容,您至少可以做的就是使用Whitelisting方法,而不仅仅是将整个代码公开给各种漏洞。
$whiteList = ['/path1/', '/path2/', ...];

if (in_array($_GET['path'], $whiteList)) { // It's OK

} else { // Ohnoes :(

}

现在,PHP有一个称为open_basedir的限制,它阻止PHP进入某个基本目录之上,但实际上,如果您发现自己这样做很懒,以至于允许任意用户输入来控制代码,您已经为失败做好了准备。

安全性内置于

layers中。这不是银弹。

© www.soinside.com 2019 - 2024. All rights reserved.