——此文章摘自《完全手册PHP网络开发详解》定价
¥
特价
¥
详细>>http://track
linktech
cn/?m_id=dangdang&a_id=A
&l=
&l_type
=
width=
height=
border=
nosave>
在很多网站中特别是在论坛系统中往往存在文件上传的功能文件上传功能允许用户将本地的文件通过Web页面提交到网站服务器上但是如果不对用户的上传进行任何限制的话可能会对服务器造成很大的危害
一个简单的文件上传页面
以下代码是一个简单的文件上传页面
<?php
if(isset($_POST[form]))
{
$uploadfile = upfiles/$_FILES[upfile][name];
//上传后文件所在的文件名和路径
move_uploaded_file($_FILES[upfile][tmp_name] $uploadfile); //上传文件
print_r($_FILES); //输出文件信息
die();
}
?>
<html>
<head>
<title>文件上传</title>
<meta httpequiv=ContentType content=text/html; charset=gb>
</head>
<H>文件上传</H>
<form enctype=multipart/formdata action= method=post>
<input name=upfile type=file>
<input name=form type=hidden value=form><BR>
<input type=submit value=Submit>
</form>
<body>
</body>
</html>
上面的代码将文件上传到网站服务器并存储在upfiles文件夹下但是由于上面的文件上传程序没有对上传的文件进行任何检查用户可以通过该程序上传自行编写的PHP脚本到服务器上并通过浏览器运行由于PHP脚本潜在的危害性该漏洞可能会导致服务器的彻底崩溃及数据的丢失
漏洞防护措施
解决上面所述问题的一种方法是通过检查上传文件的类型来限制用户的文件上传如以下代码所示
<?php
if(isset($_POST[form]))
{
if($_FILES[upfile][type] == image/pjpeg) //检查文件类型是否为JPEG
{
$uploadfile = upfiles/$_FILES[upfile][name];
//上传后文件所在的文件名和路径
move_uploaded_file($_FILES[upfile][tmp_name] $uploadfile);
//上传文件
print_r($_FILES);
die();
}
else
{
die(上传文件的格式不正确!);
}
}
?>
上面的代码要求用户上传的文件必须是JPEG类型的图片文件彻底地避免了终端用户通过上传PHP脚本危害服务器的行为