0

我是文件上传的新手,我意识到安全性是巨大的。现在根据测试目的,在我真正想深入研究安全性之前,当我尝试以下“安全性”时,我只想进行快速测试上传

<?PHP
$name = $_FILES['file']['name'];
$type = $_FILES['file']['type'];
$tmp_name = $_FILES['file']['tmp_name'];

if(isset($name)) {
    if (!empty($name)) {
    $location = "ufiles/";  
    if($_FILES['file']['type'] == "images/jpeg" || $_FILES['file']['type'] == "images/png"){

    move_uploaded_file($tmp_name, $location.$name);
                }
            }
        }
?>

此代码似乎不起作用,除非我取消文件类型检查点,否则文件不会上传。所以这显然是我的问题。但是为什么这不起作用?

另外:我意识到这不是保护文件类型的一种非常有效的方法,但它似乎最简单合乎逻辑,我只是​​很困惑为什么它不起作用。

编辑总是检查你的语法。哈哈

if($_FILES['file']['type'] == "images/jpeg" || $_FILES['file']['type'] == "images/png")   
4

4 回答 4

1

它是“image/jpeg”而不是“image s /jpeg”。PNG类型也是如此。

$_files也应该是Oberst & Dagon 提到的$_FILES 。PHP 变量区分大小写。

像这样:

if(isset($name)) {
    if (!empty($name)) {
    $location = "ufiles/";  
    if($_FILES['file']['type'] == "image/jpeg" || $_FILES['file']['type'] == "image/png"){

    move_uploaded_file($tmp_name, $location.$name);
                }
            }
        }
?>
于 2013-05-16T04:07:30.877 回答
1

我认为有问题

$_files['file']['type'] == "images/jpeg" || $_files['file']['type'] == "images/png";

请替换$_FILES['file']['type']它并尝试它,或者您可以$type按照上面的定义放置。

于 2013-05-16T04:11:13.030 回答
0

尝试将内容类型更改为image/jpegimage/png

于 2013-05-16T04:07:44.923 回答
0

这可以很容易地绕过,因为$_FILES['file']['type']可以伪造媒体类型。

如果您只想允许图像,请确保使用适当的文件扩展名保存它们。否则,攻击者可以上传.php文件,image/png从而绕过您的验证。

于 2013-05-16T04:57:01.230 回答