


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
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 (XSS)
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
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
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!'); }
- Kes sebenar serangan penggodam dan pertahanan
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
