Php 仅允许.jpg和.png文件
可能重复:Php 仅允许.jpg和.png文件,php,Php,可能重复: 如何使下面的脚本只允许.jpg图像或.png图像? 它根据会话用户名匹配将映像目录上载到mysql表。是否可以限制文件类型?因为我只需要.jpg或.png if ($_POST['submit']) { //get file attributes $Name = $_FILES['myfile']['name']; $tmp_name = $_FILES['myfile']['tmp_name']; error_reporting(E_ERROR
如何使下面的脚本只允许.jpg图像或.png图像? 它根据会话用户名匹配将映像目录上载到mysql表。是否可以限制文件类型?因为我只需要.jpg或.png
if ($_POST['submit']) {
//get file attributes
$Name = $_FILES['myfile']['name'];
$tmp_name = $_FILES['myfile']['tmp_name'];
error_reporting(E_ERROR | E_PARSE);
if ($Name) {
$location = "avatars/$Name";
move_uploaded_file($tmp_name, $location ) or die('Failed to upload picture');
$query = mysql_query("UPDATE fgusers3 SET imagelocation='$location' WHERE name='$name'") or die("Your profile image has been uploaded!");
}}
echo "Upload your image below:
<form action='profilepic.php' method='POST' enctype='multipart/form-data'>
Profile Picture: <input type='file' name='myfile'> <input type='submit' name='submit' value='upload'>
</form>";
if($\u POST['submit'])){
//获取文件属性
$Name=$_文件['myfile']['Name'];
$tmp_name=$_文件['myfile']['tmp_name'];
错误报告(E|u错误| E|u解析);
如果($Name){
$location=“化身/$Name”;
移动上传的文件($tmp_name,$location)或死亡('Failed to upload picture');
$query=mysql\u query(“更新fgusers3设置imagelocation='$location',其中name='$name')或die(“您的个人资料图像已上载!”);
}}
echo“在下面上传您的图像:
个人资料图片:
";
您可以尝试使用pathinfo
&exif\u imagetype
if(pathinfo($Name,PATHINFO_EXTENSION) != "jpg" || exif_imagetype($Name) != IMAGETYPE_JPEG)
{
// throw error
}
您可以尝试使用
pathinfo
&exif\u imagetype
if(pathinfo($Name,PATHINFO_EXTENSION) != "jpg" || exif_imagetype($Name) != IMAGETYPE_JPEG)
{
// throw error
}
您可以使用根据文件头检查文件的实际类型。这将根据文件的内容检查类型,因此它是最可靠的(例如,即使有人给你一个扩展名为“.png”的JPG,它也会为你提供正确的信息)
还有type
属性($\u FILES['myfile']['type']
),它将为您提供浏览器声称文件为的MIME类型。但是,如果有人恶意伪造请求,则无法信任该请求。您可以根据文件头检查文件的实际类型。这将根据文件的内容检查类型,因此它是最可靠的(例如,即使有人给你一个扩展名为“.png”的JPG,它也会为你提供正确的信息)
还有type
属性($\u FILES['myfile']['type']
),它将为您提供浏览器声称文件为的MIME类型。但是,如果有人恶意伪造请求,则无法信任该请求。$imageType=getimagesize($tmp\u name);
开关($imageType['mime']!=“image/jpg”或$imageType['mim']!=“image/png”){
//这里有错误代码。
}
这比检查扩展安全一点,因为扩展很容易更改。mime类型也可以更改,但需要更多知识xD$imageType=getimagesize($tmp\u name);
开关($imageType['mime']!=“image/jpg”或$imageType['mim']!=“image/png”){
//这里有错误代码。
}
这比检查扩展安全一点,因为扩展很容易更改。mime类型也可以更改,但需要更多的知识xD当然,您可以通过文件扩展名进行限制,但这并不安全。您可以尝试重命名gif文件并将其上载。更安全的一点是使用mime类型来检测文件类型(但仍然不能保证)。看看:
我认为更安全的方法是尝试获取图像的大小,或者如果成功转换为其他图像类型。当然,您可以通过文件扩展名进行限制,但这并不安全。您可以尝试重命名gif文件并将其上载。更安全的一点是使用mime类型来检测文件类型(但仍然不能保证)。看看:
我认为更安全的方法是尝试获取图像大小,或者如果成功转换为另一种图像类型。注意,欺骗扩展名、mime类型等有几种方法。在处理上载的文件时,请注意这一点。注意,欺骗扩展名、mime类型、,等等。在处理上传的文件时要注意这个事实。@hakre曾经说过。。。。。无论如何谢谢:)@hakre曾经说过。。。。。无论如何谢谢:)这安全吗?特别是反对将脚本上载到RCE?这是否安全?特别是反对将脚本上传到RCE?
if($_FILES){
$allowedExtensions = array("jpg","png");
foreach($_FILES as $key=>$val){
if(!empty($val['tmp_name'])){
$ext = end(explode(".",strtolower(basename($val['name']))));
if(in_array($ext,$allowedExtensions)){
$file = 'PATH_TO_UPLOAD'.basename($val['name']);
if(move_uploaded_file($val['tmp_name'],$file)){
//SUCCESS_MESSAGE
}
}else{
//FAIL_MESSAGE
}
}
}
}