Rumah > pembangunan bahagian belakang > tutorial php > Perlindungan keselamatan PHP: elakkan kelemahan suntikan kod

Perlindungan keselamatan PHP: elakkan kelemahan suntikan kod

PHPz
Lepaskan: 2023-06-24 12:14:02
asal
1159 orang telah melayarinya

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 {
    //执行登录操作
}
Salin selepas log masuk

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();
Salin selepas log masuk

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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) {
    //退出登录
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan