1

我不知道为什么文件没有上传到数据库中。我试图检查这个方法为什么文件没有上传。这种方法使用了很多时间。并且每次都成功地工作。如果有任何错误,请更正。

<?php
//database connection successfully worked.
  $manu = $_POST['manu'];    
if(isset($_POST['img_submit']))
{if($_FILES['file']['name']<>"")
    {$file =time().'_'.$_FILES['file']['name'];
        if (!copy($_FILES['file']['tmp_name'],"file/".$manu))
        {$message = "Invalid File type.Upload only JPEG and GIF files";}            
        if(move_uploaded_file($_FILES['file']['tmp_name'], $manu)) {$msg2 = "The file ".  basename( $_FILES['file']['name']). " has been uploaded";} 
            else{$msg3 = "There was an error uploading the file, please try again!";} }
    echo $query = "insert into upload_image (upload_img) values('".$manu."')";
    mysql_query($query) or die (mysql_error());

}?>    

<form name="form" action="" method="post"  enctype="multipart/form-data">
<table width="100%" border="0" cellspacing="4" cellpadding="5">
  <tr><td align="center" colspan="2">&nbsp;<b>Upload Image</b></td></tr>
   <tr>
    <th width="50%">&nbsp;Image Url :</th>
    <td width="50%">&nbsp;<input type="file" name="manu" value="" /></td>
  </tr>
  <tr><td align="center" colspan="2"><input type="submit" name="img_submit" value="Upload Image" /></td></tr></table></form>
4

2 回答 2

4

你不希望在你的服务器上有这个代码。

<?php
    //database connection successfully worked.
    $manu = $_POST['manu'];    
    ...
    if(move_uploaded_file($_FILES['file']['tmp_name'], $manu)

这基本上意味着,如果我可以控制的浏览器(我有),我可以发送一个带有假 MIME 类型和我选择的完整路径的$_POST['manu']文件,你的服务器会将此文件保存在我想要的任何文件夹中具有写入权限,无需检查。

假设我要在您的服务器代码可能找到它的地方evil_haxxor_skr1pt.php使用 MIME 类型上传,并代表我执行它......image/jpeg

于 2012-08-27T21:53:29.327 回答
2

对于初学者,您使用 copy() 函数和 move_uploaded_file()。不要使用复制()!这是一个很大的安全漏洞!

如果您想保存在数据库中,您需要使用类似file_get_contents()的方法来获取文件的所有内容,然后您只需像使用$manu变量一样将该数据直接使用到数据库中。不要忘记过滤输入。顺便说一句,不要使用 mysql_* 函数,使用 mysqli_* 函数。mysql_* 已经太旧和过时了。

于 2012-08-27T21:51:11.560 回答