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