Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel:如何防止用户从基本路径之外加载文件_Laravel - Fatal编程技术网

Laravel:如何防止用户从基本路径之外加载文件

Laravel:如何防止用户从基本路径之外加载文件,laravel,Laravel,我有一个Laravel网站,我有几个从存储器加载图像内容的路径。我使用以下代码执行此操作: public function show_image($name) { echo Storage::disk('images')->get($name); } 我希望阻止用户将名称设置为../../../error.log之类的内容。所以我不希望用户逃出存储目录。关于如何实现这一点,我有一些想法,但我想知道是否有最佳做法?您可以保留上载图像的注册表/索引,并且只允许用户显示该注册表中的图像

我有一个Laravel网站,我有几个从存储器加载图像内容的路径。我使用以下代码执行此操作:

public function show_image($name) {
    echo Storage::disk('images')->get($name);
}

我希望阻止用户将名称设置为../../../error.log之类的内容。所以我不希望用户逃出存储目录。关于如何实现这一点,我有一些想法,但我想知道是否有最佳做法?

您可以保留上载图像的注册表/索引,并且只允许用户显示该注册表中的图像(例如,
图像
数据库表)

或者,您可以扫描允许文件来自的目录,并确保请求的文件位于该列表中

公共功能显示图像($name){
$files=Storage::disk('images')->files();
如果(!in_数组($name,$files)){
抛出新\异常('未找到请求的文件');
}
echo存储::磁盘('images')->get($name);
}

(代码未测试)

如果您只需要文件名,而不需要位置,请禁止他们输入任何类型的文件夹。只需在
/
上剪切字符串

end(preg_split("#/#", $name)); 
当需要允许某些文件夹和所有内容时,请检查文件夹名称、子文件夹名称等