【问题标题】:Secure upload files in Laravel在 Laravel 中安全上传文件
【发布时间】:2016-03-06 05:25:08
【问题描述】:

我有一个 Laravel 5 项目,我在其中以 Medium Blob 格式将文件上传到数据库中。

但是在数据库中上传文件需要一些额外的时间来执行。

在数据库中上传文件是一种保护文件免受爬虫或某些机器人攻击的安全方法。

我已尝试将文件上传到公用文件夹。但是爬虫可以打开这些文件。

有没有办法上传文件系统中的文件?

这样爬虫就无法打开这些文件。

我希望这些文件是安全的

【问题讨论】:

    标签: laravel-5 web-crawler file-security


    【解决方案1】:

    您可以将它们上传到公共范围之外。例如,storage/ 文件夹是一个好地方。此外,您可以使用file system manager 获取它们。看看:

    $image = \Storage::get('file.jpg');
    

    编辑

    正确的 laravel 安装只允许通过网络浏览器访问 public/ 的内容。如果storage/resources/等其他目录也是public的,那么你的安装真的不对。

    也就是说,一旦你上传了storage/ 文件夹中的文件,除非你使用\Storage 门面,否则没有人可以访问它们。例如,当您调用\Storage::get('file.jpg'); 时,它会返回一个位流,您可以将它们分配到一个临时文件夹中,然后将其显示在网页端。请求完成后,图像将再次从公共域中消失。

    【讨论】:

    • 存储文件夹可以被机器人访问,所以这不是完整的证明。我希望这些文件(例如图像)不能公开访问
    • 你错了。只有 public/ 可以被浏览器访问。如果您的 storage/ 文件夹是公开的,那么您的安装不正确
    • @sujitprasad,我已经编辑了答案。此外,您需要了解有关 laravel 基础架构的更多信息,以了解哪些文件夹是公开的,哪些不是。
    • 我想,你的 laravel 安装不正确。例如,如果你在apache服务器下,一般所有公共文件都位于你的httpd.confpublicpublic_html/. So, I think that you made the installation there. A correct instalation should be located outside of that directory. You need to set the document_root`到public
    • 现在,只需将您的文件放在public_html/ 之外,例如/home/your-user/upload_files/
    【解决方案2】:

    无需更改目录,这可以通过两种方式实现

    LazyOne Answer using .htaccess

    Using robots.txt

    我建议同时实现 .htaccess 和 robots.txt,因为一些廉价爬虫会忽略 robots.txt,但他们不能忽略 .htaccess

    【讨论】:

    • 垃圾邮件机器人可以绕过 robots.txt,因为它对它们没有约束力。 .htaccess 会是完整的证明方法吗?我希望这些文件(例如图像)不能公开访问。
    【解决方案3】:

    你可以按照这个方法

    image-accessibility-for-authenticated-users-only

    因为这只允许授权用户查看图像

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2011-10-16
      • 2012-04-14
      • 2018-03-28
      • 2012-10-03
      • 2011-04-27
      • 1970-01-01
      相关资源
      最近更新 更多