Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengelakkan risiko keselamatan suntikan Perintah dalam pembangunan bahasa PHP

Bagaimana untuk mengelakkan risiko keselamatan suntikan Perintah dalam pembangunan bahasa PHP

WBOY
WBOYasal
2023-06-09 18:32:451281semak imbas

Dengan perkembangan pesat teknologi Internet, aplikasi Web telah memainkan peranan yang semakin penting dalam kehidupan seharian kita. Sebagai bahasa pengaturcaraan web yang digunakan secara meluas, PHP juga telah menjadi tumpuan aktiviti serangan siber. Antaranya, Risiko keselamatan suntikan perintah merupakan ancaman penting yang dihadapi oleh PHP Artikel ini akan memperkenalkan beberapa kaedah bagaimana untuk mengelakkan risiko keselamatan tersebut dalam pembangunan PHP.

1. Apakah itu Serangan Suntikan Perintah

Serangan Suntikan Perintah merujuk kepada penggodam yang menyuntik arahan sistem berniat jahat ke dalam aplikasi Web melalui parameter input aplikasi Web, dan Laksanakannya di web pelayan aplikasi. Serangan suntikan arahan ialah kaedah serangan yang sangat berbahaya yang membolehkan penggodam mengawal terus pelayan aplikasi web tanpa sekatan, dengan itu mendapat kawalan sepenuhnya ke atas pelayan.

2. Dua bentuk serangan suntikan Command

Serangan suntikan arahan boleh dibahagikan kepada dua bentuk dalam serangan sebenar. Satu adalah untuk terus menggunakan parameter input aplikasi web untuk menyerang, dan yang lain adalah untuk mendapatkan kebenaran sistem melalui cara lain dan kemudian menyerang.

  1. Secara langsung gunakan parameter input aplikasi web untuk menyerang

Apabila pengguna menyerahkan data ke aplikasi web melalui POST atau GET, penggodam boleh menyuntik beberapa data ke dalam data. Rentetan dengan perintah sistem, membolehkan aplikasi web melaksanakan perintah berniat jahat ini apabila dilaksanakan. Contohnya, kod sampel untuk serangan suntikan Perintah biasa kelihatan seperti ini:

mysql_query("SELECT * FROM user WHERE name = '".$_POST['name']."' AND password = '".$_POST['password']."'");

Apabila pengguna memasukkan nama pengguna dan kata laluan mereka untuk log masuk melalui borang, penggodam boleh menyuntik watak dengan arahan sistem berniat jahat ke dalam String borang, seperti yang ditunjukkan di bawah:

a' OR 1=1; DROP TABLE user;#

Arahan ini akan menyebabkan aplikasi web melakukan operasi "ATAU" apabila melaksanakan pertanyaan SQL dan memadamkan jadual bernama "pengguna".

  1. Dapatkan keistimewaan sistem melalui cara lain dan kemudian menyerang

Penggodam boleh memperoleh keistimewaan sistem melalui cara lain, seperti mengeksploitasi kelemahan lain dalam aplikasi web atau secara langsung memecahkan kata laluan pelayan . Sebaik sahaja penggodam mendapat keistimewaan sistem, mereka boleh terus mengawal pelayan melalui serangan suntikan Command. Contohnya, penggodam boleh melakukan serangan suntikan Command yang mudah melalui arahan berikut:

system(“rm -rf /”);

Arahan ini akan memadamkan semua fail dan direktori pada pelayan, menyebabkan kerugian yang sangat serius.

3. Bagaimana untuk mengelakkan serangan suntikan Command

Selepas menguasai pengetahuan asas serangan suntikan Command, kita boleh mengelakkan risiko keselamatan ini melalui kaedah berikut:

  1. Gunakan pernyataan yang disediakan

Pernyataan yang disediakan ialah cara yang selamat untuk menanyakan SQL, yang boleh mengelakkan serangan suntikan SQL dan serangan suntikan Perintah serta meningkatkan prestasi aplikasi. Kenyataan yang disediakan boleh dilaksanakan menggunakan perpustakaan sambungan seperti PDO atau MySQLi.

Sebagai contoh, berikut ialah contoh kod yang menggunakan pernyataan PDO yang disediakan untuk melaksanakan pertanyaan SQL:

$pdo = new PDO(‘mysql:host=hostname;dbname=database_name;’, ‘username’, ‘password’);
$stmt = $pdo->prepare(‘SELECT name FROM user WHERE email = :email’);
$stmt->execute(array(‘email’ => $email));
  1. Tapis dan sahkan data input

Semasa melaksanakan program Sebelum logik, kita perlu menapis dan mengesahkan data yang diproses. Anda boleh menggunakan fungsi terbina dalam PHP seperti intval(), floatval(), trim() dan fungsi lain untuk menapis dan mengesahkan data.

Sebagai contoh, kod sampel berikut menunjukkan cara menggunakan fungsi filter_input() untuk menapis dan mengesahkan data input:

$name = filter_input(INPUT_POST, ‘name’, FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, ‘email’, FILTER_VALIDATE_EMAIL);
$password = filter_input(INPUT_POST, ‘password’, FILTER_SANITIZE_SPECIAL_CHARS);
  1. Pengesahan input yang ketat dan penapisan arahan sistem

Sebelum melaksanakan perintah sistem, arahan yang dimasukkan mesti disahkan dan ditapis dengan ketat. Input boleh dihadkan menggunakan beberapa parameter baris arahan yang dipercayai.

Sebagai contoh, kod sampel berikut menunjukkan cara menggunakan fungsi escapeshellcmd() untuk menapis hujah baris arahan:

$command = escapeshellcmd($_POST['command']);
$output = shell_exec($command);
  1. Gunakan kawalan akses sistem fail selamat dan pengendalian muat naik fail

Dalam aplikasi web, pengguna boleh memuat naik fail, yang memerlukan penjagaan khas. Kerana penggodam boleh melakukan serangan suntikan CSS dan Perintah dengan memuat naik fail. Oleh itu, jenis dan saiz fail perlu disahkan semasa pemprosesan muat naik fail dan fail yang dimuat naik perlu disimpan dalam sistem fail bebas di luar pelayan web.

Sebagai contoh, kod contoh berikut menunjukkan cara mengesahkan dan menapis fail yang dimuat naik:

$allowed_types = array('png', 'jpg', 'gif');
$file_type = substr(strrchr($_FILES['file']['name'], '.'), 1);
if(!in_array($file_type, $allowed_types)) {
    die("Invalid file type.");
}
if ($_FILES['file']['size'] > 1000000) {
    die("File size too large.");
}

Di atas adalah beberapa kaedah untuk mengelakkan serangan suntikan Perintah dalam pembangunan PHP mereka secara rasional Kaedah ini boleh meningkatkan keselamatan aplikasi web.

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan risiko keselamatan suntikan Perintah dalam pembangunan bahasa PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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