Rumah > Artikel > pembangunan bahagian belakang > PHP melaksanakan pengaturcaraan selamat: serangan praktikal dan pertahanan terhadap penggodam
Dengan pembangunan berterusan dan pendalaman Internet, pelbagai serangan penggodam telah kerap berlaku, menimbulkan ancaman serius kepada keselamatan rangkaian. PHP ialah bahasa pembangunan web yang biasa digunakan yang digunakan oleh banyak perniagaan dan pembangun untuk mencipta tapak web dan aplikasi. Oleh itu, dalam pengaturcaraan PHP, cara melaksanakan pengaturcaraan selamat telah menjadi sangat penting.
Artikel ini akan memperkenalkan kerentanan keselamatan biasa dalam bahasa PHP dan cara mencegah kelemahan ini. Pada masa yang sama, kami juga akan berkongsi beberapa kes serangan penggodam dan tindakan balas yang sepadan.
SQL injection ialah salah satu kaedah serangan web yang paling biasa. Penyerang mengambil kesempatan daripada kelemahan pernyataan SQL dalam kotak input dan membuat aplikasi melaksanakan kod SQL berniat jahat melalui beberapa input tertentu, dengan itu mendapatkan dan mengganggu data.
Bagaimana untuk menghalang suntikan SQL?
① Menggunakan pernyataan yang disediakan
Pernyataan yang disediakan boleh dilaksanakan menggunakan sambungan PDO atau MySQLi dalam PHP. Penyata yang disediakan memisahkan penyata SQL dan input pengguna sebelum pelaksanaan, dengan itu mengelakkan serangan suntikan input pengguna pada penyataan SQL.
Kod sampel:
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindParam(':username', $username); $stmt->execute();
② Input penapis
Pada bila-bila masa, jangan percaya input pengguna. Sentiasa tapis input pengguna. Anda boleh menggunakan fungsi filter_input dalam PHP atau pembangun menulis fungsi penapisnya sendiri.
Kod sampel:
// 使用filter_input来避免SQL注入 $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_SPECIAL_CHARS);
③ Hadkan input pengguna
Menghadkan input ialah kaedah pengesahan yang lebih ketat yang boleh menghalang pengguna daripada memasukkan kod SQL berniat jahat. Sebagai contoh, anda boleh menetapkan bahawa nama pengguna tidak boleh mengandungi aksara khas atau mestilah lebih besar daripada atau sama dengan 6 aksara panjangnya.
Serangan skrip merentas tapak ialah kaedah serangan terhadap aplikasi web Penyerang membenamkan kod skrip dalam tapak web, dan pengguna Ia dilaksanakan apabila melawati laman web.
Bagaimana untuk mencegah serangan XSS?
① Tapis input pengguna
Sama seperti menghalang suntikan SQL, anda juga perlu menapis input pengguna. Contohnya, anda boleh menggunakan fungsi htmlspecialchars untuk menapis input pengguna dan menukar aksara khas kepada entiti HTML.
Kod sampel:
echo htmlspecialchars($_POST['message']);
② Tandakan kuki sebagai HTTP sahaja
Apabila menetapkan kuki, anda boleh menggunakan teg HTTP sahaja. Ini akan menghalang JavaScript dan skrip sebelah pelanggan lain daripada mengakses kuki. Jika penyerang tidak boleh mengakses kuki, maka mereka tidak boleh menggunakan serangan rampasan sesi.
Kod sampel:
setcookie('session_id', $session_id, time() + 86400, '/', '', true, true);
Kerentanan kemasukan fail ialah kaedah serangan web biasa. Penyerang akan menggunakan beberapa cara untuk memanipulasi sistem fail pelayan untuk mengandungi dan menjalankan kod berniat jahat.
Bagaimana untuk mengelakkan kerentanan kemasukan fail?
① Gunakan laluan mutlak
Laluan relatif boleh dilaksanakan dalam keadaan tertentu, tetapi ia mungkin dieksploitasi apabila alat terhad ditemui atau struktur direktori berubah. Gunakan laluan mutlak untuk mengelakkan jenis masalah ini.
Kod contoh:
// 路径在Unix系统下 include '/var/www/html/includes/config.php';
② Mengehadkan direktori pemasukan fail
Mengehadkan direktori yang boleh disertakan ialah salah satu cara paling langsung dan berkesan untuk mencapai keselamatan kemasukan fail. Pembangun boleh hardcode laluan fail yang boleh disertakan dalam aplikasi, atau gunakan pilihan open_basedir dalam fail php.ini untuk mengehadkan laluan fail yang boleh diakses.
Serangan CSRF (Cross-Site Request Forgery), juga dipanggil serangan pemalsuan permintaan merentas tapak, bermakna penyerang menggunakan identiti log- dalam pengguna kepada Serangan yang melakukan tindakan tertentu tanpa pengetahuan anda.
Bagaimana untuk mencegah serangan CSRF?
① Sahkan pengepala Perujuk HTTP
Pengepala Perujuk HTTP merujuk kepada halaman web dari mana pengguna memaut ke halaman sasaran. Dalam serangan CSRF, penyerang sering gagal memalsukan pengepala Perujuk HTTP yang betul. Oleh itu, pembangun boleh mengesahkan pengepala Perujuk HTTP untuk mengesan kemungkinan serangan CSRF.
Kod sampel:
// 从HTTP Referer头中获取URL $referrer = parse_url($_SERVER['HTTP_REFERER']); if ($referrer['host'] !== 'example.com') { // 可能是CSRF攻击,拒绝请求 die('CSRF detected!'); }
② Tambah token CSRF
Token CSRF ialah cara yang berkesan untuk mencegah serangan CSRF. Pada setiap penyerahan borang, hasilkan pengecam unik yang disertakan dalam data borang untuk mengelakkan penyerahan borang palsu.
Kod sampel:
// 在表单中添加CSRF令牌 session_start(); $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';
Apabila penyerang menyerahkan borang, adalah perlu untuk mengesahkan sama ada token CSRF adalah betul:
// 验证CSRF令牌是否正确 session_start(); if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { // 可能是CSRF攻击,拒绝请求 die('CSRF detected!'); }
Serangan penggodam adalah perkara biasa. Berikut ialah senario serangan biasa:
Selepas penyerang memperoleh nama pengguna dan kata laluan, dia cuba melihat senarai pengguna tapak web sasaran. Laman web ini dibangunkan menggunakan PHP dan menggunakan pangkalan data MySQL untuk menyimpan maklumat. Penyerang cuba menggunakan beberapa kaedah suntikan SQL asas, dan akhirnya memperoleh senarai pengguna tapak web sasaran melalui serangan suntikan.
Bagaimana untuk menangani serangan ini?
Serangan ini boleh dicegah dengan:
① Pengesahan input pengguna yang ketat
Seperti yang dinyatakan sebelum ini, dengan menapis input pengguna, mengehadkan input pengguna, menggunakan pernyataan Pemprosesan pratetap dan lain-lain kaedah boleh mengelakkan serangan suntikan SQL.
② Kuatkan kawalan akses
Untuk memastikan keselamatan data pengguna, kawalan akses harus diperkukuh dan kebenaran yang sesuai harus ditetapkan. Hanya pengguna dengan kebenaran tertentu boleh melakukan operasi berkaitan, seperti melihat senarai pengguna.
③ Penyulitan
Penyulitan boleh melindungi maklumat sensitif, seperti kata laluan, maklumat akaun, dsb. Anda harus memastikan bahawa semua maklumat sensitif disulitkan apabila disimpan dan dihantar.
Ringkasan
Artikel ini memperkenalkan kelemahan keselamatan biasa dalam pengaturcaraan PHP dan cara menghalang kelemahan ini, termasuk suntikan SQL, serangan skrip merentas tapak, kelemahan kemasukan fail, serangan CSRF, dsb. Selain itu, kami juga menganalisis kes serangan penggodam dan menyediakan langkah balas yang sepadan. Melalui langkah-langkah ini, pembangun boleh meningkatkan keselamatan aplikasi mereka dan melindungi data pengguna.
Atas ialah kandungan terperinci PHP melaksanakan pengaturcaraan selamat: serangan praktikal dan pertahanan terhadap penggodam. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!