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中访问删除文件,这是一个<强>非常/强>坏的想法,因为用户也可以跨越任何非图像文件。 你不能有一些路径相对于你的网页根目录,而不是一个非常重要的系统目录

额外的安全性可能包括(请注意,此列表并非详尽无遗):

  • 用户检查:检查web服务器用户是否拥有用户请求删除的文件
  • 将上载的文件存储在数据库中,并在允许删除之前检查它们是否存在以及是否已由我们的脚本上载
  • 如上所述,将文件移出系统目录
  • 使用更强的散列(即盐!)
  • 将此限制为登录用户并记录所有操作,如果有人试图删除已记录的文件,并且您确切知道该文件是谁

  • 正如@rudi_visser所说的,最好的方法是白名单,并将上传的文件+数据存储在数据库中。
    当用户试图删除文件时,确保是他,并确保文件已上载(存在于“上载”表中,而不是脚本/系统的一部分)。

    仅使用md5哈希的前5个字符并不安全。我建议使用sha1+a盐(至少)。另外,要确定的是,检查文件名是否以../或/。/(因为相对文件名通常由PHP启用)。@Tim van Elsloo为此表示感谢。可以:)我应该指出实际的脚本有
    /var/www/site
    (我的站点根)。在这种情况下,上传的文件不应该在
    /var/www/site
    中,而不是
    /var
    ?正确,上传的文件在
    /var/www/site
    中,正如Tim在评论中提到的,不允许
    /
    对它粗暴一点。好的,谢谢。很快,我将如何禁止这两件事?我想远离DB,但我知道它是最安全的。而且脚本也不是供用户“注册”的,它将每个人都分类为相同的类别。不过谢谢:-)