【发布时间】:2017-08-09 04:58:57
【问题描述】:
我受到post 的启发,可以安全地访问我存储中的文件。
帖子建议使用以下路线:
Route::get('file/{filename}', 'FileController@getFile')->where('filename', '^[^/]+$');
所以我可以访问任何文件,例如http://yoursite.com/file/secret.jpg
问题如果{filename} 包含subfolder + filename 怎么办?
该网址看起来像http://yoursite.com/file/personal/secret.jpg。
找不到路线。
我也可能有很多级别的子文件夹。
可能的解决方案
作为临时解决方案,我想用http://yoursite.com/file/personal|secret.jpg 替换http://yoursite.com/file/personal/secret.jpg,所以{filename} 将等于personal|secret.jpg。在 getFile 方法中,我会将| 替换为/。但它看起来像一个丑陋的解决方案。
有没有更好的解决方案?
【问题讨论】:
-
唯一阻止它在子文件夹中加载图像的是最后的 where() 语句。如果您删除它,您将能够从子文件夹加载图像,但这可能会带来安全风险。
-
不!,我刚刚尝试在路线尽头不使用
where。我得到(1/1) NotFoundHttpException in RouteCollection.php,这意味着找不到路线。这是有道理的。因为没有路由有/file/{param1}/{param2}或/file/personal/{filename} -
是的,不知道我在想什么……
-
你可以完全打开 where() 正则表达式......
->where('filename', '.+')