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
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.
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.
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 <, >, & 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 <, >, & 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!