【问题标题】:how to secure video upload php form如何保护视频上传php表单
【发布时间】:2018-01-24 13:09:02
【问题描述】:

我有一个用于上传图片和视频的 PHP 表单。 我使用 from getimagesize() 来保护上传图片并防止发送虚假图片,例如具有 .img 扩展名的 PHP 文件。

$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" && $imageFileType != "mp4") {echo"no way";}
else{
    if($_FILES["fileToUpload"]["type"] == "image/png"){
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check == false){echo"no way";}

    if($_FILES["fileToUpload"]["type"] == "video/mp4"){
    #how to secure it?
    }
    }

我搜索了很多类似的视频功能,但找不到任何可以防止发送假视频的东西。

【问题讨论】:

标签: php forms video file-upload


【解决方案1】:

最终,如果有人真的想欺骗你,你不能确定他们是否可以让他们的文件看起来像一个视频,但会更改其中的数据。

但是,要捕获大多数情况,通常有两种方法:

第二种方法更典型的是基于 JavaScript 而不是 PHP,因为您希望在上传文件之前在本地浏览器中进行检查,而 Javascript 通常是在那里完成更复杂工作的最简单方法。

下面是 canPlayType 方法的一个示例 - 您可能会得到很多“可能”,因为在它真正开始播放之前实际上很难 100% 确定。如果您进行测试,如果您假设任何不是“否”的内容都“可能”是视频,那么您可以看看它是否对您来说足够好。

还要注意,输入中的“accept="video/*" 实际上也会对您进行非常有效的检查,具体取决于特定浏览器和操作系统组合中的实现 - 组合之间的行为会发生微妙的变化。同样,它是值得尝试一下,看看这是否足以满足您的需求。

(function localVideoCheck() {
	'use strict'

  var checkVideo = function (event) {
    var file = this.files[0]
    var type = file.type
    var videoNode = document.querySelector('video');
    var canPlayResult = videoNode.canPlayType(type);
    if (canPlayResult === "")  {
      canPlayResult = "No"
    }
    alert(canPlayResult);
  }

  var inputNode = document.querySelector('input');
  inputNode.addEventListener('change', checkVideo, false);
  })()
<h1>Local video file check</h1>
<input type="file" accept="video/*"/>
<div hidden>
  <video controls autoplay></video>
</div>

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2011-06-10
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多