在laravel-4中控制访问机密文件

ric*_*een 3 security public accessible laravel-4

我已经读过公共文件夹中的文件可以通过Laravel中的Web浏览器访问.当我在公共文件夹中键入文件的路径时,我看不到该文件,除非我在路由中定义了路径.

我正在制作一个下载页面,以便用户可以通过from下载加密/分类的材料.

我不希望用户能够以下载表单或其他受控方法之外的任何其他方式访问文件.

我是否需要创建让我们说私人文件夹并存储他们的文件.如果我这样做,我仍然可以访问后端的文件吗?

或者除非路由定义,否则公用文件夹中的文件是不可访问的?如果可以,我可以将文件存储在公共场所吗?

Ant*_*iro 10

除非您的Web服务器具有设置为特定目录的策略,否则任何人都可以访问公用文件夹下的文件.

如果您当前无法访问公用文件夹中的文件,可能是因为您没有正确编写URL,即:

一个文件

/var/www/myapp/public/img/logo.png 
Run Code Online (Sandbox Code Playgroud)

可通过以下方式访问:

http://myapp.com/img/logo.png
Run Code Online (Sandbox Code Playgroud)

请注意,只有在您的网络服务器配置正确并且您的.htaccess文件已就位且能够重写您的网址时,您的网址中才会显示您文件夹的公共部分.

对于敏感文件,您可以做的是将它们存储在您的应用程序文件夹(或公共区域以外的任何其他文件夹),只有您的应用程序可以访问,这样的东西可以正常:

/var/www/myapp/app/storage/<create a new folder here>
Run Code Online (Sandbox Code Playgroud)

然后,是的,创建一个读取和显示安全文件的路径:

Route::get('readfile/{fileName}', ['before' => 'auth', 'use' => 'ReadFileController@read']);
Run Code Online (Sandbox Code Playgroud)

过滤器'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)
    {
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)