【问题标题】:Can't upload .exe / .msg files, can everything else无法上传 .exe / .msg 文件,其他都可以
【发布时间】:2017-07-31 20:37:50
【问题描述】:

我正在运行以下环境:

  • PHP 7.1.7
  • IIS 10
  • Windows 10 1703
  • Laravel 5.4.30

这是我的上传脚本(非常简单,接受所有上传):

public function uploadToTemporary(AttachmentUploadRequest $request)
{
    /** @var \Illuminate\Http\UploadedFile $file */
    $file = $request->file('file');

    return [
        'name' => $file->getClientOriginalName(),
        'location' => $file->store('temporary'),
    ];
}

我的AttachmentUploadRequest 规则:

public function rules()
{
    return [
        'file' => 'file|max:20000',
    ];
}

当我上传扩展名为 .msg、.exe 的文件时,我收到:

(1/1) 错误异常 fopen(C:\Users\Steve\Websites\tickets\storage\app\temporary/V4WslICBUK3TjK9Cn46nmKkXxtJVAGfDkxJiN9Lg.): 无法打开流:权限被拒绝

问题是,我可以成功上传所有其他类型的文件。以下是在没有任何权限问题的情况下成功上传的文件扩展名:

  • .docx, .doc
  • .pptx、.ppt
  • .xlsx, .xls
  • .txt
  • .mp4、.avi、.mp3
  • .pdf
  • .vrd
  • .jpg、.gif、.bmp

有人知道为什么会这样吗?

编辑:我通过下载1.1mb 可执行文件并上传它来验证文件已成功保存在临时 Windows 位置:

【问题讨论】:

  • 您是否正在运行 mod_security?如果是这样 - 检查SecRule 指令
  • 我不知道有mod_security 扩展名。通过谷歌搜索,看起来像一个 Apache 模块?我没有配置它,这是肯定的。
  • 服务器可能正在运行 DLP。将扩展名从 .exe 更改为 ,rename 怎么样?如果您重命名为不同的扩展名,Web 服务器应该接受您的 exe 文件。
  • 是的,它是 Apache 的一个模块,它扫描文件并阻止它们首先被上传,从而导致 500 错误。它也可以在签名的基础上工作,因此更改扩展名不起作用,但是看到文件被放置在不是它的服务器上(问题出在 PHP 中)。你能按照@Leptonator 的建议去做吗?
  • @Leptonator,不幸的是,我通过将 .exe 重命名为 .rename 或任何其他名称收到了同样的异常。太奇怪了!

标签: php laravel


【解决方案1】:

也许某些防病毒保护阻止了该操作。尝试暂时禁用它。

【讨论】:

  • 只运行 Windows Defender,没有例外,根本没有防火墙修补。我完全禁用了它,不幸的是仍然收到同样的异常。
  • 您是否查看了事件日志以获取更多详细信息?
  • 不幸的是,事件日志或 PHP 错误日志中没有任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2019-12-03
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
相关资源
最近更新 更多