PHP图片上传问题

时间:2009-01-13 09:53:31

标签: php

<td valign="top">
<input type="hidden" name="MAX_FILE_SIZE" value="12485760" />
Image?</td>
<td><input type="file" name="image">

$path = "uploads/";
$path .= basename($_FILES['image']['name']);

$path = addslashes($path);
$name = $_FILES['image']['name'];

echo $path;

move_uploaded_file($_FILES['image']['tmp_name'], $path);

上面的代码应该可以工作,因为我有一个非常相似的工作。但是,它似乎没有从表单中选择任何东西(最顶层的代码)。如果有人能够指出我是一个傻瓜并打破这个,我会非常感激。

2 个答案:

答案 0 :(得分:7)

确保您的enctype="multipart/form-data"代码中包含<form>属性。

答案 1 :(得分:0)

你知道这是完全不安全的吗?您可以在仅具有可信用户的Intranet上使用它,但是否则此代码会遇到麻烦。

不能依赖

file ['name']来包含任何可用作文件名的内容,并且攻击者可以轻松地将其设置为包含“..”路径部分的内容,以覆盖uploads文件夹之外的文件。通过上传扩展名为.php的文件,他们很可能会在您的服务器上执行任意代码。

如果您使用文件['name'],则必须对其进行强烈清理(例如,删除所有非字母数字字符并自行添加适当的文件扩展名),您将不得不处理未获取文件扩展名的可能性。完全没有文件名(在这种情况下,你必须从例如随机数中提出一个)。

'echo $ path'还为您提供HTML注入,导致跨站点脚本攻击。

addslashes()不会保护您免受目录遍历或HTML注入的侵害。它也无法正确地转义SQL字符串,这是它的原始目的。一个好的经验法则是任何使用addslashes()的应用程序(通过magic_quotes显式或隐式)都是做错了。