验证文件上载

时间:2014-12-28 17:03:02

标签: validation file-upload input

允许用户上传多张图片现在我的问题是如何找到它只有一张图片或者它包含一些黑客代码

我是否需要制作验证器或我如何找到?

因为有很多方法可以通过图像进行黑客上传

如何阻止或保护我的网站黑客攻击文件上传过程,我允许使用文件输入'接受'属性

<input type="file" accept="image/*"></label></p>

这会保护吗,

有人可以帮助我进行客户端和服务器端验证

2 个答案:

答案 0 :(得分:0)

不,这不安全。

相反,使用服务器端PHP函数exif_imagetype()来检查它是否是图像。请参阅以下代码:

$allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
$detectedType = exif_imagetype($_FILES['fupload']['tmp_name']);
$error = !in_array($detectedType, $allowedTypes);

在此处查找更多信息:uploaded file type check by PHP。或者,您可以使用getimagesize()

答案 1 :(得分:0)

尝试这个简单的客户端验证

<script type="text/javascript">
var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];

function Validate(oForm) {
    var arrInputs = oForm.getElementsByTagName("input");
    for (var i = 0; i < arrInputs.length; i++) {
        var oInput = arrInputs[i];
        if (oInput.type == "file") {
            var sFileName = oInput.value;
            if (sFileName.length > 0) {
                var blnValid = false;
                for (var j = 0; j < _validFileExtensions.length; j++) {
                    var sCurExtension = _validFileExtensions[j];
                    if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {
                        blnValid = true;
                        break;
                    }
                }

                if (!blnValid) {
                    alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));
                    return false;
                }
            }
        }
    }

    return true;
}
</script>

表格应如下所示:

<form ... onsubmit="return Validate(this);">

和服务器端使用

if (!in_array($sExt, array('.gif', '.jpg', '.png'))) {
            $errors[] = "Image types alowed are (.gif, .jpg, .png) only!";
        }