part 1:认识$_FILES
<?php
$uploaddir = 'uploadfile/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "<pre>";
print_r($_FILES);
echo "</pre>";
}
?>
bool move_uploaded_file( string filename, string destination)
用于检查并确保由filename指定的文件是合法的上传文件(即通过 PHP 的HTTP Post上传机制所上传的),如果文件合法,则将其转为由destination指定的文件。
输出$_FILES:
Array
(
[userfile] => Array
(
[name] => ma.php
[type] => application/octet-stream
[tmp_name] => C:\WINDOWS\temp\php98.tmp
[error] => 0
[size] => 85827
)
)
part2:$_FILES的不足
<?php
if($_FILES['userfile']['type'] != "image/gif") //检测文件的MIME类型,需要浏览器提供该信息的支持
{
echo "对不起,我们只允许上传GIF格式的图片!!";
exit;
}
$uploaddir = 'uploadfile/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "文件是有效的, 成功上传!!!";
} else {
echo "文件上传错误!!!请重新上传!!!!\n";
}
?>
绕过办法:利用PHP自身的$_FILES获得type是通过数据包中的Content-Type,我们只要修改包中的Content-Type即可,改为image/gif即可上传木马。
<?php
$uploaddir = 'uploadfile/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "<pre>";
print_r($_FILES);
echo "</pre>";
}
?>
bool move_uploaded_file( string filename, string destination)
用于检查并确保由filename指定的文件是合法的上传文件(即通过 PHP 的HTTP Post上传机制所上传的),如果文件合法,则将其转为由destination指定的文件。
输出$_FILES:
Array
(
[userfile] => Array
(
[name] => ma.php
[type] => application/octet-stream
[tmp_name] => C:\WINDOWS\temp\php98.tmp
[error] => 0
[size] => 85827
)
)
part2:$_FILES的不足
<?php
if($_FILES['userfile']['type'] != "image/gif") //检测文件的MIME类型,需要浏览器提供该信息的支持
{
echo "对不起,我们只允许上传GIF格式的图片!!";
exit;
}
$uploaddir = 'uploadfile/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "文件是有效的, 成功上传!!!";
} else {
echo "文件上传错误!!!请重新上传!!!!\n";
}
?>
绕过办法:利用PHP自身的$_FILES获得type是通过数据包中的Content-Type,我们只要修改包中的Content-Type即可,改为image/gif即可上传木马。