


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!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


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

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).
