我有一个用于上传图片和视频的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?
}
}
我为视频搜索了很多这样的功能,但找不到任何阻止发送假视频的内容。
答案 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>