Dieser Artikel stellt Ihnen die logische Implementierungsanalyse des PHP-Datei-Uploads vor. Ich denke, dass diese Art der Implementierung in Projekten relativ häufig vorkommt. Ich hoffe, dass sie für Freunde in Not hilfreich sein wird
Der Dateiname richtet sich nach den Geschäftsanforderungen. Wenn es nicht erforderlich ist, den ursprünglichen Namen beizubehalten, generieren Sie einfach den Namen zufällig und fügen Sie das durch die Whitelist überprüfte Suffix hinzu. [Empfohlenes Lernen: PHP-Video-Tutorial
]Im Gegenteil, seien Sie vorsichtig beim Umgang mit:
//允许上传的后缀白名单 $extension_white_list = ['jpg', 'pdf']; //原始文件的名字 $origin_file_name = 'xx/xxx/10月CPI同比上涨2.1%.php.pdf'; //提取文件后缀,并校验是否在白名单内 $extension = strtolower(pathinfo($origin_file_name, PATHINFO_EXTENSION)); if (!in_array($extension, $extension_white_list)) { die('错误的文件类型'); } //提取文件名 $new_file_name = pathinfo($origin_file_name, PATHINFO_BASENAME); //截取掉后缀部分 $new_file_name = mb_substr($new_file_name, 0, mb_strlen($new_file_name) - 1 - mb_strlen($extension)); //只保留有限长度的名字 $new_file_name = mb_substr($new_file_name, 0, 20); //替换掉所有的 . 避免攻击者构造多后缀的文件,缺点是文件名不能包含 . $new_file_name = str_replace('.', '_', $new_file_name); //把处理过的名字和后缀拼接起来构造成一个名字 $new_file_name = $new_file_name . '.' . $extension; print_r($new_file_name); //10月CPI同比上涨2_1%_php.pdf
Dateiinhaltsverarbeitung
Bei einer PHP-Datei ist das Suffix nur oberflächlich wird nichts an der Tatsache ändern, dass es PHP-Code enthält.
Bei Bilddateien können Sie den Bilddatei-Header lesen, um den Bildtyp zu bestimmen. Natürlich habe ich diese Methode nicht getestet. Wenn Sie interessiert sind, können Sie sie selbst testen. Auch wenn die obige Methode machbar ist, kann sie dennoch umgangen werden. Schreiben Sie einfach die Bytes der Header-Eigenschaften eines bestimmten Bildtyps in den Header der PHP-Datei, um sie zu verschleiern. Bei der Inhaltsverarbeitung von Bilddateien besteht der eigentliche Trick darin, das Bild neu zu zeichnen. Verwenden Sie den Kopierbefehl unter Windows, um eine Bilddatei mit PHP-Code zu erstellen. Der Befehl lautet wie folgt:Copy 1.jpg/b + test.php/a 2.jpg
try { $jpg = '包含php代码的.jpg'; list($width, $height) = getimagesize($jpg); $im = imagecreatetruecolor($width, $height); $image = imagecreatefromjpeg($jpg); imagecopyresampled($im, $image, 0, 0, 0, 0, $width, $height, $width, $height); $target = '重绘后干净的图片.jpg'; imagejpeg($image, $target); } finally { isset($im) && is_resource($im) && imagedestroy($im); isset($image) && is_resource($image) && imagedestroy($image); }
Verarbeitung von Dateiberechtigungen
Besprechen Sie nur die Berechtigungen unter Linux:
读取,字母 r 或数字 4 表示 写入,字母 w 或数字 2 表示 执行,字母 x 或数字 1 表示
r:可打开读取此文件 w:可写入此文件 x:可执行此文件
r:可读取此目录的内容列表 w:可在此目录里面进行:增、删、改文件和子目录 x:可进入此目录
Benutzer in derselben Benutzergruppe wie der Benutzer, der das Verzeichnis erstellt hat, haben die Berechtigung, dieses Verzeichnis zu lesen und zu betreten.
Die Berechtigungseinstellung 755 kann verhindern, dass Nginx beim Proxyen statischer Dateien 403-Fehler meldet.
mkdir($save_path, 0755, true);
Übernehmen Sie strengere Berechtigungseinstellungen für hochgeladene Dateien. Es sollten 644-Berechtigungen festgelegt werden, was bedeutet:
Der Benutzer, der die Datei erstellt hat, hat die Berechtigung, diese Datei zu lesen und zu schreiben und kann sie nicht ausführen
Benutzer in derselben Benutzergruppe wie der Benutzer, der die Datei erstellt hat, haben nur Leseberechtigungen Wenn eine illegale Datei hochgeladen wird, kann der Inhalt nicht geändert oder ausgeführt werden.
chmod($file, 0644);
Kaufe Geld, um einen OSS-Speicherdienst zu kaufen, denke nicht einmal darüber nach, wirf es einfach hinein.
Autorenblog: https://learnku.com/blog/buexplain
Das obige ist der detaillierte Inhalt vonÜberprüfung der PHP-Datei-Upload-Verarbeitungslogik (umfassende Analyse). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!