我已经读过公共文件夹中的文件可以通过Laravel中的Web浏览器访问。当我在公共文件夹中输入文件的路径时,我看不到该文件,除非我在路径中定义了路径。
我正在制作一个下载页面,以便用户可以通过from下载加密/分类的资料。
我不希望用户能够以下载表单或其他受控方法以外的任何其他方式访问文件。
我是否需要创建让我们说私人文件夹并将文件存储起来。如果我这样做,我仍然可以访问后端的文件吗?
或者除非路由定义,否则公用文件夹中的文件是不可访问的?如果可以,我可以将文件存储在公共场所吗?
答案 0 :(得分:10)
任何人都可以访问公用文件夹下的文件,除非您的网络服务器的策略设置为特定目录。
如果您目前无法访问公共文件夹中的文件是因为,可能,则表示您没有正确编写网址,即:
中的文件
/var/www/myapp/public/img/logo.png
可通过以下方式访问:
http://myapp.com/img/logo.png
请注意,您的网址中不存在您文件夹的公开部分仅在您的网络服务器配置正确并且您的.htaccess
文件已就位且能够重写您的网址。< / p>
对于敏感文件,您可以做的是将它们存储在您的应用程序文件夹(或公共区域以外的任何其他文件夹),只有您的应用程序可以访问,这样就可以了:
/var/www/myapp/app/storage/<create a new folder here>
然后,是的,创建一条阅读和展示您的安全文件的路线:
Route::get('readfile/{fileName}', ['before' => 'auth', 'use' => 'ReadFileController@read']);
过滤器'before' => 'auth'
将确保未经过身份验证的过滤器永远无法访问文件。
在您的控制器中,您可以执行以下操作来检查是否可以看到文件:
class ReadFileController extends Controller {
public function read($fileName)
{
if(Auth::user()->id == 1) // of course this is not a good way, just an example
{
return $this->getFile($fileName);
}
else
{
return Response::make(null, 403); // forbidden
}
}
private function getFile($fileName)
{
...
}
}
答案 1 :(得分:0)
此外,您可以在路由中使用身份验证“middelware”来添加更好的访问控制。
Route::get('routeName', ['middleware' => 'auth', 'uses' =>'XController@action']);