Php 防止用户滥用图像删除脚本
核心部分基本上包括以下内容:Php 防止用户滥用图像删除脚本,php,Php,核心部分基本上包括以下内容: $file = basename($_GET['f']); $directory = "/var/www/site/"; $file = $directory . $file; $hash = $_GET['h']; $md5check = md5($file); $md5check = substr($md5check, 0, 5); if ($md5check == $hash) { if (file_exists($file)) {
$file = basename($_GET['f']);
$directory = "/var/www/site/";
$file = $directory . $file;
$hash = $_GET['h'];
$md5check = md5($file);
$md5check = substr($md5check, 0, 5);
if ($md5check == $hash) {
if (file_exists($file)) {
unlink($file);
}
else {
die('error');
}
}
else {
header('Location: error');
exit;
}
我意识到使用用户输入会带来麻烦,但如何让服务器“定位”要删除的文件?我能逃脱注射吗?用户将正在加载 除了MD5之外,还有其他的散列系统吗?MD5对于文件的每个位置都是独立的
例如
file1.rar在12:00am下载=differenthash
file1.rar在晚上11:00下载=随机散列
file1.rar在两种情况下都是相同的文件 与md5相比:
file1.rar在12:00am下载=随机散列
file1.rar在晚上11:00下载=随机散列
file1.rar在两种情况下都是相同的文件 < P> >您已经使用了<代码> BaseNeN/COD>,这应该限制了攻击向量(因为用户不能从不同的目录删除文件),但是让用户可以从/VaR中访问删除文件,这是一个<强>非常/强>坏的想法,因为用户也可以跨越任何非图像文件。 你不能有一些路径相对于你的网页根目录,而不是一个非常重要的系统目录 额外的安全性可能包括(请注意,此列表并非详尽无遗):
正如@rudi_visser所说的,最好的方法是白名单,并将上传的文件+数据存储在数据库中。
当用户试图删除文件时,确保是他,并确保文件已上载(存在于“上载”表中,而不是脚本/系统的一部分)。仅使用md5哈希的前5个字符并不安全。我建议使用sha1+a盐(至少)。另外,要确定的是,检查文件名是否以../或/。/(因为相对文件名通常由PHP启用)。@Tim van Elsloo为此表示感谢。可以:)我应该指出实际的脚本有
/var/www/site
(我的站点根)。在这种情况下,上传的文件不应该在/var/www/site
中,而不是/var
?正确,上传的文件在/var/www/site
中,正如Tim在评论中提到的,不允许。
和/
对它粗暴一点。好的,谢谢。很快,我将如何禁止这两件事?我想远离DB,但我知道它是最安全的。而且脚本也不是供用户“注册”的,它将每个人都分类为相同的类别。不过谢谢:-)