检查文件名是否包含用于文件(图像)上传的%2F

时间:2019-02-20 04:34:36

标签: php

我正在制作文件(图像)上传页面。

我要检查文件名是否包含%2F。

这是现在的脚本:

$target_dir = "/home/ID/img/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        $uploadOk = 1;
    } else {
        $uploadOk = 0;
    }
}

// Check if name is empty
if ($_FILES["fileToUpload"]["name"] == "") {
    $uploadOk = 0;
}

// Check if file already exists
if (file_exists($target_file)) {
    echo "<div style='text-align:center;'><h2><br>Sorry, file already exists. <strong>Use other filename</strong></h2><h3>or<br><a href='https://img.sjang.xyz/". basename( $_FILES["fileToUpload"]["name"]). "' target='_blank'>Check the image with that filename</a></h3></div><span>";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 20971520) {
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "ico"
&& $imageFileType != "gif" ) {
    $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Failed";

// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "Uploaded";
    } else {
        echo "Failed";
    }
}

现在,如果文件名包含%2F,则无法显示该图像。 有没有办法检查[“ name”]是否包含%2F并使$ uploadOk == 0?

2 个答案:

答案 0 :(得分:1)

尝试使用此代码来检查文件名中的<!DOCTYPE html> <html lang="en"> <head> </head> <body> <h1>Users</h1> </body> </html>

%2F

我希望这会有所帮助。

答案 1 :(得分:1)

您可以按以下说明尝试使用strpos():http://php.net/manual/en/function.strpos.php

但是请记住,此函数返回子字符串的位置,而不是TRUE。如果未找到子字符串,它将返回FALSE。因此,您可以尝试:

if(strpos($_FILES["fileToUpload"]["name"], '%2F') !== FALSE) {
    $uploadOk = 0;
}