この記事では、PHP ファイルアップロードのロジック実装分析を紹介します。この種の実装は、プロジェクトでは比較的一般的であるはずです。見てみましょう~困っている友人に役立つことを願っています~
ファイル名の処理
ファイル名はビジネス要件によって異なります。元の名前を保持する必要がない場合は、名前をランダムに生成し、ホワイトリストで検証されたサフィックスを追加します。 [推奨される学習: PHP ビデオ チュートリアル ]
逆に、慎重に扱ってください:
//允许上传的后缀白名单 $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
ファイル コンテンツの処理
# #ファイルの拡張子は表面上だけです。PHP ファイルの拡張子を jpg に変更しても、ファイルが PHP コードを保持しているという事実は変わりません。 画像ファイルの場合は、画像ファイルのヘッダーを読んで画像の種類を判断できます。もちろん、私はこの方法をテストしていません。興味があれば、自分でテストしてください。 また、上記の方法が実行可能であっても、特定の画像タイプのヘッダー特性のバイトを PHP ファイルのヘッダーに書き込むだけで、それを偽装することができます。 画像ファイルのコンテンツ処理の本当のコツは、画像を再描画することです。 Windows システムで copy コマンドを使用して、php コードを含むイメージ ファイルを作成します。コマンドは次のとおりです: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); }
ファイル アクセス許可の処理
Linux でのアクセス許可についてのみ説明し、最初に Linux でのアクセス許可について簡単に紹介します。读取,字母 r 或数字 4 表示 写入,字母 w 或数字 2 表示 执行,字母 x 或数字 1 表示
r:可打开读取此文件 w:可写入此文件 x:可执行此文件
r:可读取此目录的内容列表 w:可在此目录里面进行:增、删、改文件和子目录 x:可进入此目录
##作成者も同じグループ内の他のユーザーも、このディレクトリを読み取って入る権限を持っていません。
mkdir($save_path, 0755, true);
#ファイルを作成したユーザーと同じユーザー グループ内のユーザーには、読み取り権限のみが与えられます
作成者でも同じグループでもない他のユーザーは読み取り権限のみを持ちます
644 権限設定により、たとえ違法なファイルがアップロードされた場合でも確実にアクセスできますまた、内容を変更して実行することもできません。
chmod($file, 0644);
OSS ストレージ サービスを購入するためにお金を購入します。何も考えずに、ただ投げてください。それは。
元のアドレス: https://learnku.com/articles/73100著者のブログ: https://learnku.com/blog/buexplain
以上がPHPファイルアップロード処理ロジックの検討(総合分析)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。