Dengan perkembangan teknologi rangkaian yang berterusan, PHP, sebagai bahasa pengaturcaraan web yang meluas, digunakan oleh semakin ramai orang. Walau bagaimanapun, masalah kelemahan suntikan kod dalam pembangunan PHP sentiasa menyusahkan pengaturcara. Kerentanan suntikan kod berlaku apabila penyerang menyerahkan kod dan data hasad kepada aplikasi, menyebabkan aplikasi melakukan tindakan yang tidak diingini atau mendedahkan data sensitif. Dalam artikel ini, kita akan membincangkan perlindungan keselamatan PHP untuk mengelakkan masalah ini.
1. Pemeriksaan parameter
Pemeriksaan parameter ialah asas untuk mencegah kelemahan suntikan kod. Dalam proses pembangunan PHP, data input harus diperiksa Anda boleh menggunakan penapisan fungsi untuk menyemak parameter input, atau menggunakan ungkapan biasa untuk menyemak parameter input. Dengan menapis dan menyemak parameter, penyerang boleh dihalang daripada menyerang sistem dengan memasukkan kod berniat jahat.
Contohnya:
$username = $_POST['username']; $password = $_POST['password']; if (!preg_match("/^[a-zA-Z0-9]{4,16}$/",$username)) { echo "用户名格式不正确"; } else if (!preg_match("/^[a-zA-Z0-9]{6,18}$/",$password)) { echo "密码格式不正确"; } else { //执行登录操作 }
2. Suntikan SQL
Suntikan SQL ialah salah satu kaedah serangan suntikan yang paling biasa, iaitu penyerang menyuntik pernyataan SQL ke dalam parameter input untuk mendapatkan data Sensitif dalam pangkalan data. Oleh itu, semasa proses pembangunan, pernyataan SQL mesti diparameterkan atau menggunakan pernyataan yang disediakan dan bukannya menyambung parameter terus ke dalam pernyataan SQL.
Contohnya:
$username = $_POST['username']; $password = $_POST['password']; $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? and password = ?"); $stmt->bind_param("ss", $username, $password); $stmt->execute();
3. Serangan XSS
Serangan XSS, juga dikenali sebagai serangan skrip rentas tapak, ialah kaedah serangan rangkaian biasa. Penyerang akan menyuntik beberapa kod skrip berniat jahat ke dalam halaman web Apabila pengguna lain melawat halaman web, kod ini akan dilaksanakan, mengakibatkan kebocoran maklumat pengguna atau halaman web diganggu. Oleh itu, semasa proses pembangunan, adalah perlu untuk menapis kandungan input dan menggunakan fungsi htmlspecialchars untuk melepaskan aksara khas.
Contohnya:
$name = $_POST['name']; $message = $_POST['message']; echo htmlspecialchars($name) . " said: " . htmlspecialchars($message);
4. Kerentanan muat naik fail
Kerentanan muat naik fail bermakna penyerang memuat naik fail berniat jahat ke pelayan dalam fungsi muat naik fail dan melaksanakan kod berniat jahat . Oleh itu, semasa proses muat naik fail, anda perlu menyemak fail, seperti jenis fail, saiz, dsb., dan tetapkan direktori fail yang dimuat naik kepada baca sahaja untuk mengelak daripada memuat naik fail berniat jahat.
Contohnya:
$allowed_extensions = array("jpg", "jpeg", "png", "gif"); $upload_max_size = 1024 * 1024; $file = $_FILES['file']; //检查文件大小 if ($file['size'] > $upload_max_size) { echo "文件过大"; } //检查文件类型 $extension = pathinfo($file['name'], PATHINFO_EXTENSION); if (!in_array($extension, $allowed_extensions)) { echo "文件类型不支持"; } //上传文件 move_uploaded_file($file['tmp_name'], "/var/www/uploads" . uniqid() . "." . $extension);
5. Pengurusan Sesi
Pengurusan sesi merujuk kepada memastikan keselamatan sesi pengguna selepas pengguna log masuk. Penyerang boleh mendapatkan maklumat pengguna yang sensitif dengan memalsukan maklumat sesi atau meneka ID sesi. Oleh itu, kawalan keselamatan diperlukan dalam pengurusan sesi, seperti mengehadkan masa log masuk, mengehadkan bilangan log masuk, menggunakan protokol SSL, menetapkan Session Cookie HttpOnly, dsb.
Contohnya:
session_start(); //设置Session Cookie HttpOnly ini_set("session.cookie_httponly", 1); //设置Session ID长度 ini_set("session.hash_bits_per_character", 6); //限制登录时间 if ($_SESSION['last_active_time'] + 3600 < time()) { //退出登录 } //限制登录次数 if ($_SESSION['login_failed_times'] > 3) { //退出登录 }
Semasa proses pembangunan PHP, langkah di atas boleh mengelakkan kerentanan suntikan kod dengan berkesan. Pembangun harus menggabungkan langkah keselamatan di atas mengikut keperluan khusus untuk meningkatkan keselamatan aplikasi PHP.
Atas ialah kandungan terperinci Perlindungan keselamatan PHP: elakkan kelemahan suntikan kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!