cari
Rumahpembangunan bahagian belakangtutorial phpPHP 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.

  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();

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

  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']);

② 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);
  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';

② 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!');
}

② 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!');
}
  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
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
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

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

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

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

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

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

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

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

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

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

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

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

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

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

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

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

See all articles

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

mPDF

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 baharu

SublimeText3 Linux versi terkini

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

DVWA

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

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).