请帮助我清理进入mysql的php数据
嗨,朋友们,我有一张mysqli连接的表格请帮助我清理进入mysql的php数据,php,mysql,Php,Mysql,嗨,朋友们,我有一张mysqli连接的表格 <label for="fullname">Fullname</label> <input type="text" name="fullname" /> <label for="photo">Upload photo</label> <input name="photo" type="file"/> 请帮帮我,我正在一个实时站点上使用这个也许你需要mysql\u real\u
<label for="fullname">Fullname</label>
<input type="text" name="fullname" />
<label for="photo">Upload photo</label>
<input name="photo" type="file"/>
请帮帮我,我正在一个实时站点上使用这个也许你需要mysql\u real\u escape\u string()
我建议使用现有的PHP数据库库使用占位符:或者是来自Pear的内容,比如。有了占位符,数据库库就可以保证正确转义,代码也就更容易阅读了 在这种情况下,您的代码将类似于:
$sql = "INSERT INTO members (fullname,photo) VALUES (?, ?)";
$values = array($fullname, $photo) ;
$prepared = $link->prepare($sql) ;
$result = $prepared->execute($values) ;
编辑我刚刚意识到你正在使用mysqli,所以继续使用它或用于教程
$sql = "INSERT INTO members (fullname,photo) VALUES (?, ?)";
$stmt = $link->prepare($sql) ;
//ss means the 2 parameters after it should be treated as string, string
$stmt->bind_param('ss', $fullname, $photo) ;
$result = $stmt->execute() ;
使用准备好的语句:
$fullname = $_POST['fullname'];
$uploaddir = './uploads/';
//upload file in folder
$uploadfile = $uploaddir. basename($_FILES['photo']['name']);
//insert filename in db
$upload_filename = basename($_FILES['photo']['name']);
move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile);
$photo = $upload_filename;
$sql = "INSERT INTO members(fullname,photo) VALUES(?, ?)";
$stmt = $link->prepare($sql);
$stmt->bind_param('ss',$fullname,$photo);
$stmt->execute();
有关更多信息,请参阅,这也有保护您免受攻击的好处。当您使用
mysqli
时,您会得到参数化查询。这通常比自己尝试转义字符串要简单:
$q= $mysqli->prepare('INSERT INTO members (fullname, photo) VALUES (?, ?)');
$q->bind_param('ss', $fullname, $photo);
$q->execute();
请注意,信任用户提供的文件名进行文件上载是非常危险的。在您当前的代码中,用户可以上载.php
文件,如果uploads
文件夹暴露于web服务器,则该文件将允许攻击者在您的服务器上运行他们选择的任意代码
其他可能带来麻烦的文件名包括空字符串、非ASCII和控制字符、.htaccess
在Apache服务器上,以及带有前导/尾随点和空格或使用Windows服务器上的系统保留文件名之一的文件。此外,似乎没有保护措施防止用户上传的照片覆盖了其他用户的照片,这很可能是偶然发生的
通常最好根据随机数或行的主键生成文件名,并添加所需的扩展名(例如.jpeg
)。清理用户提供的文件名比您想象的要困难得多
请帮助我,我正在一个现场使用这个
如果这是向不受信任的用户公开的,我会认真关闭该网站,直到您修复它。我想对此发表评论: 请注意,信任用户供应商文件名进行文件上载是有风险的。在您当前的代码中,用户可以上载.php文件,如果uploads文件夹向web服务器公开,则该文件将允许攻击者在您的服务器上运行他们选择的任意代码 通常最好根据随机数或行的主键生成文件名,并添加所需的扩展名(如jpeg)。清理用户提供的文件名比您想象的要困难得多 在我看来,清理文件名不是正确的方法。首先,一个可执行文件可以用任何文件名上传,也可以由其他用户下载。然后,许多用户将尝试启动该文件。如果它有病毒或类似病毒,用户现在就受到威胁
相反,可以用来检测类型,除非文件是严格意义上的图像,在这种情况下,我相信最好的做法似乎是使用检查它是否是允许的格式。
mysql\u real\u escape\u string
在使用mysqliCan时不需要。有人指导我如何限制文件类型吗?非常感谢
$q= $mysqli->prepare('INSERT INTO members (fullname, photo) VALUES (?, ?)');
$q->bind_param('ss', $fullname, $photo);
$q->execute();