我是文件上传的新手,我意识到安全性是巨大的。现在,在我真正想要深入了解安全性之前的每个测试目的,我想要快速测试上传,当我尝试以下“安全性”
<?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")
答案 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/jpeg
和image/png
答案 3 :(得分:0)
由于$_FILES['file']['type']
中的媒体类型可以伪造,因此可以轻松绕过。
如果您只想允许图像,请确保使用适当的文件扩展名保存图像。否则,攻击者可以将.php
个文件上传为image/png
,这会绕过您的验证。