ホームページ >バックエンド開発 >PHPチュートリアル >脆弱性を防ぐために画像アップロード スクリプトを安全に実装するにはどうすればよいですか?
安全な画像アップロード スクリプト
はじめに
悪意のあるアクティビティを防ぐには、画像のアップロードを保護することが重要ですウェブサイトの完全性を確保します。この記事では、さまざまな潜在的な脆弱性に対処する安全なイメージ アップロード スクリプトを実装するための包括的なソリューションを提供します。
主な要件
安全なイメージ アップロード スクリプトの構築には、いくつかの重要な要件が含まれます。
実装
PHP コード (upload.php):
<br><?php</p><p>if (isset($_POST['submit'])) {</p><pre class="brush:php;toolbar:false">// File type whitelist $allowed_types = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif']; // Sanitize input $file_name = $_FILES['image']['name']; $file_type = $_FILES['image']['type']; $file_size = $_FILES['image']['size']; // Validate file type if (!in_array($file_type, $allowed_types)) { echo "Invalid file type. Please upload an image."; exit; } // Validate file size if ($file_size > 1000000) { echo "File too large. Maximum size allowed is 1MB."; exit; } // Verify image using GD library $image_info = getimagesize($_FILES['image']['tmp_name']); if (!$image_info) { echo "Invalid image. Please upload a valid image."; exit; } // Generate random file name and extension $new_file_name = str_replace(".", "", microtime()) . "." . pathinfo($file_name, PATHINFO_EXTENSION); // Isolated upload path outside document root $upload_directory = 'uploads/'; // Save image to secure directory if (!move_uploaded_file($_FILES['image']['tmp_name'], $upload_directory . $new_file_name)) { echo "Image upload failed. Please try again."; exit; } echo "Image uploaded successfully.";</p> <p>}<br>?></p> <p><form action="upload.php" method="post" enctype="multipart/form-data"></p> <pre class="brush:php;toolbar:false"><input type="file" name="image">**Retrieve Image PHP Code (display.php):**
<code> <?php // Sanitize input $id = (int)($_GET['id'] ?? 0); // Connect to database $host = 'localhost'; $user = 'username'; $pass = 'password'; $db = 'database'; $db = new mysqli($host, $user, $pass, $db); if ($db->connect_error) { echo "Database connection error: " . $db->connect_error; exit; } // Retrieve image details from database $sql = "SELECT * FROM uploads WHERE id = ?"; $stmt = $db->prepare($sql); $stmt->bind_param('i', $id); $stmt->execute(); $result = $stmt->get_result()->fetch_assoc(); if (!$result) { echo "Invalid image ID."; exit; } header('Content-Type: ' . $result['mime_type']); header('Content-Length: ' . filesize('uploads/' . $result['path'])); readfile('uploads/' . $result['path']); $db->close();
データベースのセットアップ
というテーブルを含むデータベースを作成します。次の列を持つ「アップロード」:
アップロード後アクション
画像が安全にアップロードされたら、次のような追加のアクションを検討する必要があります。
結論
この記事で説明した手順を実行すると、画像アップロード システムのセキュリティを大幅に強化し、Web サイトを攻撃から保護できます。潜在的な脆弱性。提供されたコードと推奨事項は、安全な画像アップロード実装の強固な基盤として機能します。
以上が脆弱性を防ぐために画像アップロード スクリプトを安全に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。