我的服务器上有一些非常敏感的信息,因此安全性是一个大问题。用户需要能够上传视频。我知道允许用户上传文件会带来安全威胁,因为没有 100% 的方法可以阻止他们上传非视频。但我显然可以选择服务器将保留哪些文件。
我知道检查文件扩展名是不够的。检查 MIME 类型会更好,但它仍然可以伪造。那么我该如何检查文件是否是视频呢?
Play it!
唯一确定的方法是使用一些代码来解码相关类型的视频,看一下它(并检查是否有合理的结果,例如非零持续时间)。
但除此之外,您的风险很低:
非恶意场景:
- 上传者上传视频,内容类型为 video/*。
- 您存储八位位组和内容类型。
- 下载程序下载视频,然后您使用收到的内容类型。
- 下载者观看视频(或抱怨编解码器等)
恶意场景一:
- 上传者上传一个令人讨厌的木马,其内容类型为 video/*。
- 您存储八位位组和内容类型。
- 下载程序会下载令人讨厌的木马,然后您使用收到的内容类型。
- 下载程序会在视频播放器中打开令人讨厌的木马。讨厌的木马什么也不做,因为它不是视频。用户抱怨编解码器。更糟糕的情况是,他们在 ubuntu 论坛上抱怨缺乏对专有格式的支持,在您的页面上添加拼写错误的评论,说该网站如何糟糕,因为视频无法播放,等等。
恶意场景2:
- 上传者上传被写入视频的令人讨厌的木马,该木马利用流行视频播放器的某些缓冲区溢出问题。
- 你储存...
- 下载器...
- 可能就像上述情况之一,但也可能是他们受到了漏洞攻击(如果他们使用受影响的玩家)。
不过,关于场景 2,需要注意三件事:
- 测试它的视频并不能保证安全,因为它很可能在某些播放器中也能正常工作。
- 如果漏洞存在于 ffmpeg 中,测试视频可能会使您的服务器容易受到攻击!
- 这种类型的漏洞既罕见又难以实现。一般风险与上传和下载 jpeg 或 png 相同。事实上它有点小(确实有一段时间影响常用 jpeg 库的这种类型的漏洞)。
总之,只需确保仅输出您接受的内容类型,并强制文件扩展名与它们匹配即可;如果用户上传名为 hahaha.exe 的视频/mpeg,则将其重命名为 hahaha.mpg
编辑:哦,还有:
恶意场景3:
上传者上传的视频会以消耗大量资源的方式利用某些播放器。在这种情况下,下载程序只会kill-9/ctrl-alt-delete/your-OSs-kill-them-all-of-choice,但如果你的服务器正在测试它是一个视频,那么它最终可能会遇到麻烦,因为有没有人介入并杀死它试图解释的 200 个(并且随着脚本小子的脚本不断上传更多)“视频”。
只需进行正常的视频处理就足以让您遭受 DoS 攻击(毕竟视频处理相对繁重),因此测试文件可能会带来更多的危险,而不是为您避免的危险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)