【发布时间】:2012-09-18 23:37:45
【问题描述】:
我想从浏览器窗口上传图片到我的服务器。但是,上传字段对每个人都是可见的,所以我需要设置一些限制。我只找到了 w3schools 文件上传(从 w3fools.com 开始,我不相信它)。我希望限制是:
最大尺寸 2.5M
图像类型 jpg、jpeg、png、gif
所以这是 w3schools 提供的代码,但它实际上不会将文件保存在任何地方?我已经对其进行了一些修改以满足我的需要。
<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/jpeg"))
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2500000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
由于我不希望我的网站被黑客入侵,我想要一个安全的解决方案,有什么帮助吗?
编辑
代码甚至什么都不做。那我该怎么做呢?
【问题讨论】:
-
我认为你应该看看stackoverflow.com/a/10271295/1226894它回答了你的问题
-
由于您只接受图片,您也可以查看stackoverflow.com/a/10464964/1226894,它会告诉您如何最好地检测假图片
-
@Baba 我用了你提供的代码,带着我的狗出去了。当我回来时,我的 wordpress 网站被 !X!X HACKED BY RUSSIAN PEOPLE !X!X 和它下面的俄罗斯国旗所取代。我看了看图片上传,注意到上传文件夹下有一些奇怪的文件,在索引文件夹中有一个 hack.php,我会看一下。但是,该文件是与您的脚本一起上传的,我的网站被黑了。怎么样?
-
这可能不是您网站中唯一的漏洞......您需要检查整个网站
-
@Baba 您的代码确实包含安全漏洞,但是我认为您不应该删除它,因为简化示例最适合大多数人(更易于阅读和理解) .根据服务器版本/配置,简单的空字符攻击可能足以跳过您的扩展检查,并且如果服务器配置为每个人都可以通过发送 HTTP 请求从任何目录执行任何 .php 文件......无需解释了。 永远不要相信任何用户输入,并使用可以处理任何二进制序列而不仅仅是纯文本的函数进行清理。或使用数据模板。
标签: php file-upload image-upload