<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);
上面的代码应该可以工作,因为我有一个非常相似的工作。但是,它似乎没有从表单中选择任何东西(最顶层的代码)。如果有人能够指出我是一个傻瓜并打破这个,我会非常感激。
答案 0 :(得分:7)
确保您的enctype="multipart/form-data"
代码中包含<form>
属性。
答案 1 :(得分:0)
你知道这是完全不安全的吗?您可以在仅具有可信用户的Intranet上使用它,但是否则此代码会遇到麻烦。
不能依赖file ['name']来包含任何可用作文件名的内容,并且攻击者可以轻松地将其设置为包含“..”路径部分的内容,以覆盖uploads文件夹之外的文件。通过上传扩展名为.php的文件,他们很可能会在您的服务器上执行任意代码。
如果您使用文件['name'],则必须对其进行强烈清理(例如,删除所有非字母数字字符并自行添加适当的文件扩展名),您将不得不处理未获取文件扩展名的可能性。完全没有文件名(在这种情况下,你必须从例如随机数中提出一个)。
'echo $ path'还为您提供HTML注入,导致跨站点脚本攻击。
addslashes()不会保护您免受目录遍历或HTML注入的侵害。它也无法正确地转义SQL字符串,这是它的原始目的。一个好的经验法则是任何使用addslashes()的应用程序(通过magic_quotes显式或隐式)都是做错了。