Keselamatan Laman Web PHP: Bagaimana Mengelakkan Kerentanan Biasa?
Hari ini, dengan perkembangan pesat Internet, semakin banyak laman web menggunakan PHP sebagai bahasa pembangunan utama. Walau bagaimanapun, bersama-sama dengannya datang cabaran keselamatan laman web. Dengan mengeksploitasi kelemahan tertentu dalam bahasa PHP, penggodam boleh menyebabkan kebocoran data pengguna, ranap sistem dan juga pencerobohan pelayan. Untuk memastikan keselamatan tapak web, kami perlu mengambil beberapa langkah untuk mengelakkan kelemahan biasa.
Artikel ini akan memperkenalkan beberapa kelemahan PHP biasa dan menyediakan beberapa contoh kod untuk membantu anda mencari dan menyelesaikan kelemahan ini.
Kerentanan suntikan SQL ialah salah satu kelemahan keselamatan yang paling biasa. Ia membolehkan penyerang mengubah suai operasi pangkalan data dan juga mendapatkan maklumat sensitif dengan menyuntik kod SQL berniat jahat. Berikut ialah contoh:
$username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; $result = mysqli_query($conn, $sql);
Dalam contoh di atas, kami membina pernyataan pertanyaan SQL secara langsung menggunakan pembolehubah yang dimasukkan oleh pengguna. Melakukannya menyebabkan kod kami terdedah. Untuk mengelakkan serangan suntikan SQL, kita boleh menggunakan pertanyaan berparameter atau pernyataan yang disediakan. Kod sampel adalah seperti berikut:
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); $stmt->execute(); $result = $stmt->get_result();
Dengan menggunakan pertanyaan berparameter atau pernyataan yang disediakan, kami boleh memastikan input pengguna akan dilepaskan dan diproses dengan betul, sekali gus menghalang serangan suntikan SQL.
Skrip merentas tapak ialah satu lagi kerentanan keselamatan biasa. Ia membolehkan penyerang menyuntik skrip berniat jahat ke tapak web, yang dilaksanakan dalam penyemak imbas pengguna lain apabila mereka melawat tapak web. Berikut ialah contoh:
$message = $_GET['message']; echo "<p>" . $message . "</p>";
Dalam contoh di atas, kami terus mengeluarkan mesej yang dimasukkan pengguna ke halaman web. Jika input pengguna mengandungi skrip hasad, skrip hasad akan dilaksanakan dalam pelayar pengguna lain. Untuk mengelakkan serangan skrip merentas tapak, kami boleh menggunakan fungsi melarikan diri HTML untuk melepaskan input pengguna. Kod sampel adalah seperti berikut:
$message = $_GET['message']; echo "<p>" . htmlspecialchars($message) . "</p>";
Dengan menggunakan fungsi htmlspecialchars, kami boleh memastikan kandungan yang dimasukkan oleh pengguna akan dilepaskan dengan betul, sekali gus menghalang serangan skrip merentas tapak.
Kerentanan muat naik fail membolehkan penyerang memuat naik fail berniat jahat ke pelayan dan melaksanakan kod hasad di dalamnya. Berikut ialah contoh:
$target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["file"]["name"]); if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { echo "File is valid, and was successfully uploaded."; } else { echo "Upload failed"; }
Dalam contoh di atas, kami membina laluan fail sasaran terus menggunakan nama fail yang dimuat naik oleh pengguna. Melakukannya menyebabkan kod kami terdedah. Untuk mengelakkan kelemahan muat naik fail, kami harus mengesahkan fail yang dimuat naik pengguna menggunakan penyenaraian putih sambungan fail dan semakan jenis fail. Kod sampel adalah seperti berikut:
$target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["file"]["name"]); $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // 允许的文件类型 $allowedTypes = array('jpg', 'jpeg', 'png', 'gif'); // 验证文件类型 if (!in_array($imageFileType, $allowedTypes)) { $uploadOk = 0; } if ($uploadOk == 0) { echo "Upload failed"; } else { if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { echo "File is valid, and was successfully uploaded."; } else { echo "Upload failed"; } }
Dengan menggunakan senarai putih sambungan fail dan semakan jenis fail, kami boleh memastikan jenis fail yang dimuat naik oleh pengguna dipercayai, sekali gus menghalang kelemahan muat naik fail.
Ringkasan:
Di atas ialah beberapa kelemahan PHP biasa dan contoh kod tentang cara mengelakkannya. Adalah penting untuk sentiasa mengesahkan dan memproses input pengguna dan mengelak daripada menggunakan input pengguna secara langsung untuk membina operasi sensitif untuk melindungi tapak web kami daripada ancaman serangan berniat jahat. Selain itu, sentiasa mengemas kini dan mengekalkan rangka kerja dan kebergantungan PHP kami juga merupakan kunci untuk memastikan keselamatan tapak web. Saya harap artikel ini akan membantu anda memahami dan meningkatkan keselamatan laman web PHP.
Atas ialah kandungan terperinci Keselamatan laman web PHP: Bagaimana untuk mengelakkan kelemahan biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!