2009-01-13 126 views
0
<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); 

上面的代码应该工作,因为我有一个非常相似的工作整齐。但是,它似乎没有从窗体中选择任何东西(最顶端的代码)。如果任何人都可以指出我是一个傻瓜,并打破这一点,我会非常感激。PHP图像上传问题

+0

请添加var_dump($ _ FILES)的输出;到你的问题 – Karsten 2009-01-13 09:56:27

+0

请向我们展示完整的表格(只是相关的部分)和完整的脚本(也只是相关的部分)。 – Gumbo 2009-01-13 09:57:04

回答

7

确保您的<form>标记上具有属性enctype="multipart/form-data"

0

你知道这是完全不安全的吧?你可以在只有受信任的用户的Intranet上才能摆脱它,但否则这个代码会有麻烦。

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

如果你使用file ['name'],它必须被强化消毒(例如,删除所有非字母数字字符并自己添加一个合适的文件扩展名),并且你必须处理不可能得到一个文件名(在这种情况下,你必须从例如随机数开始)。

'echo $ path'还会导致HTML注入,从而导致跨站点脚本攻击。

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