【问题标题】:Verification of image accepting invalid files upload验证图片接受无效文件上传
【发布时间】:2013-08-15 04:36:31
【问题描述】:

我的上传代码有问题,它接受无效文件并将文件名保存在数据库中。不知道代码哪一部分出错了。

<?php
session_start();
if (!isset($_SESSION['LOGIN_STATUS'])) {
    header('location:login.php');
}
?>

<?php
$allowedExts = array(
    "gif",
    "jpeg",
    "jpg",
    "png"
);
$temp        = explode(".", $_FILES["file"]["name"]);
$extension   = end($temp);
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 2000000) && in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    } else {
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

        if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
            $image = $_FILES["file"]["name"];
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
            $image = $_FILES["file"]["name"];
        }
    }
} else if ($_FILES["file"]["name"] == null) {
    $image = $_SESSION['IMAGE'];
} else {
    echo "Invalid file";
}
?>

<?php
include("includes/dbConnect.php");

$Department   = $_SESSION['DEPARTMENT'];
$lname        = $_POST['lname'];
$fname        = $_POST['fname'];
$mname        = $_POST['mname'];
$alias        = $_POST['alias'];
$place        = $_POST['place'];
$address      = $_POST['address'];
$gender       = $_POST['gender'];
$nationality  = $_POST['nationality'];
$age          = $_POST['age'];
$complexion   = $_POST['complexion'];
$height       = $_POST['height'];
$weight       = $_POST['weight'];
$build        = $_POST['build'];
$haircolor    = $_POST['haircolor'];
$pecularities = $_POST['pecularities'];
$other        = $_POST['other'];
$clname       = $_POST['clname'];
$cfname       = $_POST['cfname'];
$cmname       = $_POST['cmname'];
$cnumber      = $_POST['cnumber'];
$caddress     = $_POST['caddress'];
$relationship = $_POST['relationship'];
$description  = $_POST['description'];
$lastseen     = $_POST['lastseen'];

mysql_query("INSERT INTO `persons`(LastName,FirstName,MiddleName,Image,Alias,Place,Address,Gender,Nationality,Age,Complexion,Height,Weight,Build,HairColor,          Pecularities, Other, CLastName, CFirstName, CMiddleName, ContactNumber, Relationship, Status, CAddress,Description,Department,lastseen) VALUES ('$lname','$fname','$mname','$image','$alias',       '$place','$address','$gender','$nationality','$age','$complexion','$height','$weight','$build','$haircolor','$pecularities',        '$other','$clname','$cfname','$cmname','$cnumber','$relationship','Missing','$caddress','$description','$Department','$lastseen')");

header('location:admin_search.php');
mysql_close($con);

?>

上面的代码验证了用户输入,但它也将无效文件保存在文件名中,而不是文件本身。我不知道哪个部分有错误它执行查询部分但上传图像的验证接受不同的文件类型但我有扩展名allowExts。

【问题讨论】:

  • 如果您希望 'myPic.JPG' 也作为有效文件,我建议在 'in_array()' 中将 '$extension' 转换为小写。
  • 它的工作问题是如果我把查询它执行它即使它是无效的它保存文件名而不是文件。我的保存路径在我的目录中@ViPiN
  • 你需要把你的查询放在你的 if/else 语句中,否则无论如何它都会被执行。

标签: php mysql upload verification


【解决方案1】:

你需要把exit作为下面的代码。

else {
    echo "Invalid file";
    exit;
}

【讨论】:

  • 仍然有一个错误,当我删除较低的查询部分时它说无效文件但是当我再次放置它时它会执行并保存它并且不会在@DevZer0 表单中说无效文件
  • 为什么不直接在一行中完成die("Invalid file");
  • @Fred 这是一种选择。我不确定在die() 的情况下是否会发送标头
  • @DevZer0 无论如何,OP 都在使用echo,因此如果发送了标头,则会失败。
  • @DevZer0 就个人而言,我认为 OP 将不得不重新考虑这一点,找到另一个上传 sn-p 并从那里应用条件。
猜你喜欢
  • 2017-03-26
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2016-06-14
  • 1970-01-01
  • 2017-07-25
相关资源
最近更新 更多