Rumah pembangunan bahagian belakang tutorial php PHP melaksanakan pengaturcaraan selamat: serangan praktikal dan pertahanan terhadap penggodam

PHP melaksanakan pengaturcaraan selamat: serangan praktikal dan pertahanan terhadap penggodam

Jun 18, 2023 am 10:55 AM
php Pengaturcaraan selamat Pertempuran menyerang dan bertahan

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.

  1. 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();
Salin selepas log masuk

② 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);
Salin selepas log masuk

③ 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.

  1. 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']);
Salin selepas log masuk

② 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);
Salin selepas log masuk
  1. 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';
Salin selepas log masuk

② 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.

  1. 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!');
}
Salin selepas log masuk

② 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'] . '">';
Salin selepas log masuk

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!');
}
Salin selepas log masuk
  1. 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!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

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

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

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

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

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

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

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,

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

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

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

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

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

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 Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

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.

See all articles