如何保护视频上传php表单

时间:2018-01-24 13:09:03

标签: php forms video file-upload

我有一个用于上传图片和视频的PHP表单。 我使用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?
    }
    }

我为视频搜索了很多这样的功能,但找不到任何阻止发送假视频的内容。

1 个答案:

答案 0 :(得分:0)

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

然而,为了捕获大多数情况,通常有几种方法:

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

下面是一个canPlayType方法的例子 - 你可能会得到很多'maybes',因为在实际开始播放之前实际上很难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>