PHP - 文件上传安全性,为什么这个方法不起作用?

时间:2013-05-16 04:05:28

标签: php file security upload

我是文件上传的新手,我意识到安全性是巨大的。现在,在我真正想要深入了解安全性之前的每个测试目的,我想要快速测试上传,当我尝试以下“安全性”

<?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 个答案:

答案 0 :(得分:1)

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

$ _ files 也应该是 $ _ FILES ,如Oberst&amp;衮。 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);
                }
            }
        }
?>

答案 1 :(得分:1)

我认为

存在问题
$_files['file']['type'] == "images/jpeg" || $_files['file']['type'] == "images/png";

请替换$_FILES['file']['type']而不是尝试,或者您可以按照上面的定义添加$type

答案 2 :(得分:0)

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

答案 3 :(得分:0)

由于$_FILES['file']['type']中的媒体类型可以伪造,因此可以轻松绕过。

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