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

Perlindungan keselamatan PHP: Cegah kelemahan suntikan kod

WBOY
WBOYasal
2023-06-24 09:30:431462semak imbas

Dengan kemunculan era Internet, PHP, sebagai bahasa skrip sumber terbuka, digunakan secara meluas dalam pembangunan Web, terutamanya memainkan peranan penting dalam pembangunan laman web dinamik. Walau bagaimanapun, isu keselamatan juga telah menjadi isu yang tidak boleh diabaikan dalam pembangunan PHP. Antaranya, kelemahan suntikan kod sentiasa menjadi salah satu topik hangat dalam bidang keselamatan web kerana kesukaran untuk mencegah dan kemudaratan yang membawa maut. Artikel ini akan memperkenalkan prinsip, bahaya dan kaedah pencegahan kerentanan suntikan kod dalam PHP.

1. Prinsip dan kemudaratan kerentanan suntikan kod

Kerentanan suntikan kod juga dikenali sebagai suntikan SQL, XSS dan kelemahan lain Ia adalah salah satu jenis kerentanan yang paling biasa dalam aplikasi web . Ringkasnya, apa yang dipanggil kerentanan suntikan kod bermakna penyerang menyerahkan data yang dibina secara berniat jahat, menyebabkan aplikasi web melaksanakan SQL, JavaScript dan skrip lain yang telah dibina sebelumnya oleh penyerang, sekali gus menyebabkan kelemahan keselamatan dalam aplikasi.

Sebagai contoh, dalam bahasa PHP, kod berikut mempunyai kerentanan suntikan kod:

<?php
    $user = $_POST['user'];
    $password = $_POST['password'];
    $sql = "SELECT * FROM users WHERE username='$user' AND password='$password'";
    mysql_query($sql);
?>

Anggap penyerang telah memperoleh nama pengguna dan kata laluan yang diserahkan oleh pengguna, tetapi bukan pengguna sebenar , dan Rentetan kod SQL berniat jahat dibina:

' OR 1=1#

Penyerang menyerahkan rentetan kod ini kepada pelayan melalui POST, kemudian pernyataan SQL yang akhirnya dilaksanakan oleh pelayan menjadi:

SELECT * FROM users WHERE username='' OR 1=1#' AND password=''

di mana , # mewakili ulasan SQL, yang memintas sekatan keadaan WHERE asal dan mendapatkan semua maklumat pengguna, mengakibatkan risiko kebocoran maklumat.

Kemudaratan kerentanan suntikan kod adalah sangat serius. Penyerang boleh menggunakan kelemahan ini untuk mendapatkan maklumat sensitif pengguna, mengubah suai data, memusnahkan tapak web, dsb. Oleh itu, amat penting bagi pembangun aplikasi web untuk mencegah kelemahan suntikan kod.

2. Kaedah untuk mencegah kerentanan suntikan kod

  1. Penapisan data input

Penapisan data input ialah kaedah penting untuk mencegah kerentanan suntikan kod. Apabila pembangun menerima data input daripada pengguna, mereka harus menapis dan mengesahkan data untuk menghapuskan data input yang menyalahi undang-undang dan mengelakkan data daripada diganggu atau disuntik oleh penyerang. Kaedah penapisan yang biasa digunakan termasuk ungkapan biasa, penapisan fungsi, cap masa, dsb.

  1. Pengaturcaraan Pangkalan Data

Apabila menulis kod berkaitan pangkalan data, pembangun harus menggunakan pernyataan pertanyaan berparameter dan bukannya menyambung penyataan SQL secara langsung. Pernyataan pertanyaan berparameter boleh menghalang serangan suntikan SQL dengan berkesan Melalui pra-penyusunan, parameter ditukar kepada rentetan sebelum melaksanakan pernyataan, sekali gus menghapuskan kemungkinan suntikan SQL.

Berikut ialah kod sampel menggunakan pernyataan yang disediakan PDO:

<?php
    $user = $_POST['user'];
    $password = $_POST['password'];
    $dsn = 'mysql:host=localhost;dbname=test';
    $dbh = new PDO($dsn, 'test', 'test');
    $sth = $dbh->prepare('SELECT * FROM users WHERE username=:username AND password=:password');
    $sth->bindParam(':username', $user);
    $sth->bindParam(':password', $password);
    $sth->execute();
?>

Dengan menggunakan pernyataan yang disediakan PDO, pembangun boleh menghantar pembolehubah yang dimasukkan pengguna sebagai nilai terikat dan bukannya menggunakan kaedah Rentetan penggabungan, dengan itu berkesan mencegah serangan suntikan SQL.

  1. Penapisan data keluaran

Apabila mengeluarkan data kepada pengguna, data hendaklah disahkan dan ditapis dengan betul untuk mengelakkan kemungkinan serangan skrip merentas tapak (XSS). Pembangun harus menggunakan fungsi escape untuk melarikan data dan menukar aksara khas seperti 95ec6993dc754240360e28e0de8de30a, & menjadi entiti HTML untuk mengelakkan potensi risiko keselamatan.

Berikut ialah contoh kod yang menggunakan fungsi escape untuk melarikan diri dari data output:

<?php
    $user = $_COOKIE['user'];
    $user = htmlspecialchars($user, ENT_QUOTES, 'UTF-8');
    echo "欢迎您,".$user;
?>

Dengan menggunakan fungsi htmlspecialchars, kemungkinan aksara khas seperti 95ec6993dc754240360e28e0de8de30a, & boleh ditukar kepada entiti HTML, dengan itu mengelakkan risiko serangan XSS.

Kesimpulan

Kerentanan suntikan kod ialah isu keselamatan biasa dalam pembangunan aplikasi web, tetapi dengan langkah berjaga-jaga yang betul, pembangun boleh mengurangkan risiko dan melindungi keselamatan aplikasi web dengan berkesan. Artikel ini memperkenalkan beberapa kaedah untuk mencegah kerentanan suntikan kod, dengan harapan dapat memberikan sedikit rujukan dan bantuan kepada pembangun semasa membangunkan aplikasi web.

Atas ialah kandungan terperinci Perlindungan keselamatan PHP: Cegah kelemahan suntikan kod. 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