Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengelakkan serangan suntikan arahan menggunakan PHP

Bagaimana untuk mengelakkan serangan suntikan arahan menggunakan PHP

WBOY
WBOYasal
2023-06-24 08:55:361863semak imbas

Dengan perkembangan Internet, isu keselamatan rangkaian semakin menarik perhatian Terutamanya bagi pembangun laman web, isu keselamatan perlu diberi perhatian lebih. Serangan suntikan arahan adalah salah satu kaedah serangan yang lebih popular dalam beberapa tahun kebelakangan ini, yang boleh membawa kepada isu keselamatan seperti kebocoran data dan gangguan maklumat. Dalam pembangunan PHP, bagaimana untuk mengelakkan serangan suntikan arahan adalah masalah besar Mari kita lihat cara menggunakan PHP untuk mengelakkan serangan tersebut.

1. Fahami serangan suntikan arahan

Pertama sekali, adalah sangat penting untuk memahami apa itu serangan suntikan arahan. Serangan suntikan arahan bermaksud penyerang menyerahkan kod hasad untuk menjadikan keseluruhan sistem atau aplikasi sebagai pelaksana yang sengaja melakukan operasi hasad tertentu Penyerang menggunakan kod hasad untuk melaksanakan perintah dan operasi sewenang-wenangnya, dengan itu memperoleh kawalan ke atas sistem dan aplikasi.

Serangan suntikan arahan biasa termasuk suntikan SQL, suntikan arahan sistem pengendalian, suntikan LDAP, dsb. Dalam pembangunan PHP, suntikan arahan sistem pengendalian biasanya berlaku, jadi seterusnya kita akan memberi tumpuan kepada bagaimana untuk mencegah serangan suntikan arahan sistem pengendalian.

2. Elakkan penyambungan langsung arahan

Dalam pengaturcaraan PHP, terdapat banyak situasi di mana perintah sistem perlu dilaksanakan, seperti muat naik fail, perintah sistem, dsb. Mengelakkan perintah splicing secara langsung ialah langkah pencegahan paling asas, kerana arahan splicing boleh menyebabkan penyerang mengeksploitasi kelemahan dengan mudah.

Berikut ialah contoh untuk menunjukkan keperluan untuk mengelakkan penyambungan langsung arahan apabila memanggil arahan sistem:

<?php 
// 获取传入参数
$user_input = $_POST['name'];

// 定义命令
$command = 'ls -l '.$user_input;

// 执行命令
exec($command, $result);

// 输出结果
var_dump($result);
?>

Dalam kod di atas, $user_input ialah parameter yang diperoleh melalui $_POST, yang disambung terus ke dalam pembolehubah $command , mudah dieksploitasi oleh penyerang.

Pendekatan yang betul ialah menapis dan menyemak aksara tertentu pada $user_input, dan kemudian sambungkannya ke dalam $command. Secara khusus, anda boleh menggunakan fungsi seperti escapeshellarg(), escapeshellcmd() dan addslashes() dalam PHP untuk menapis.

<?php 
// 获取传入参数
$user_input = $_POST['name'];

// 过滤参数
$user_input = escapeshellarg($user_input);

// 定义命令
$command = 'ls -l '.$user_input;

// 执行命令
exec($command, $result);

// 输出结果
var_dump($result);
?>

Dalam kod di atas, kami menggunakan fungsi escapeshellarg() untuk menapis $user_input dan kemudian menyambungkannya ke dalam $command, dengan itu mengelakkan serangan suntikan arahan.

3. Gunakan pengikatan parameter

Selain mengelakkan arahan penyambungan secara langsung, penyelesaian lain ialah menggunakan pengikatan parameter. Pengikatan parameter memerlukan penggunaan sambungan PDO dalam PHP. Berikut ialah contoh:

<?php 
// 连接数据库
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = 'root';
$dbh = new PDO($dsn,$username,$password);

// 获取传入参数
$user_input = $_POST['password'];

// 定义命令
$command = "SELECT * FROM user WHERE password = :password";

// 准备查询
$stmt = $dbh->prepare($command);

// 绑定参数
$stmt->bindParam(':password', $user_input);

// 执行查询
$stmt->execute();

// 获取结果
$result = $stmt->fetchAll();

// 输出结果
var_dump($result);
?>

Dalam kod di atas, kami menggunakan kaedah bindParam() untuk mengikat parameter $user_input, mengelakkan kaedah penyambungan terus pernyataan sql, dengan itu mengelakkan serangan suntikan SQL.

4. Gunakan alat audit kod

Akhir sekali, kami mengesyorkan menggunakan alat audit kod untuk membantu kami menemui isu keselamatan yang berpotensi. Alat audit kod biasa termasuk PMD, SonarQube, dsb., yang boleh melakukan analisis statik, pengesanan kerentanan, dsb. pada kod untuk mengesan risiko keselamatan lebih awal.

Ringkasnya, dalam pembangunan PHP, perhatian harus diberikan untuk memastikan keselamatan kod dan mengelakkan masalah seperti serangan suntikan arahan. Kaedah di atas boleh membantu kami menghalang serangan suntikan arahan dan melindungi keselamatan kod dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan serangan suntikan arahan menggunakan 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