Kaedah untuk menghalang aplikasi PHP daripada serangan penafian perkhidmatan
Dengan perkembangan pesat Internet, isu keselamatan rangkaian telah menjadi semakin ketara. Denial of Service Attack (DoS) ialah teknik serangan rangkaian biasa yang bertujuan untuk menjadikan sistem sasaran tidak dapat bertindak balas kepada permintaan daripada pengguna yang sah, dengan itu menjadikan perkhidmatannya tidak tersedia. Untuk aplikasi yang ditulis dalam PHP, kita perlu mengambil beberapa langkah untuk mencegah serangan DoS.
Kaedah biasa serangan DoS adalah untuk menghabiskan sumber pelayan melalui sejumlah besar sambungan serentak. Penyelesaian kepada masalah ini adalah untuk mengehadkan bilangan sambungan serentak bagi setiap pengguna atau alamat IP. Anda boleh menggunakan sesi dalam PHP untuk menjejaki bilangan sambungan pengguna dan menolak permintaan sambungan baharu apabila nombor tertentu dicapai. Berikut ialah contoh kod mudah:
<?php session_start(); // 定义最大连接数 $maxConnections = 10; // 跟踪当前连接数 if (!isset($_SESSION['connection_count'])) { $_SESSION['connection_count'] = 1; } else { $_SESSION['connection_count']++; } // 如果连接数超过最大连接数,则拒绝连接 if ($_SESSION['connection_count'] > $maxConnections) { header("HTTP/1.1 429 Too Many Requests"); die("Too many connections. Please try again later."); } // 处理正常的请求 // ... ?>
Dengan mengawal bilangan maksimum sambungan, kami boleh menghalang satu pengguna atau alamat IP daripada mengambil terlalu banyak sumber pelayan.
Satu lagi serangan DoS biasa ialah dengan menghantar input berniat jahat untuk mencetuskan kelemahan aplikasi atau menyebabkan ranap sistem. Untuk mengelakkan serangan seperti ini, kami memerlukan pengesahan dan penapisan yang ketat terhadap input pengguna. Contohnya, panjang rentetan input, jenis dan format boleh disemak untuk mengelakkan permintaan berniat jahat.
Berikut ialah contoh asas yang menunjukkan cara melakukan semakan asas pada input pengguna:
<?php if(isset($_POST['input'])) { $input = $_POST['input']; // 检查输入长度是否合法 if (strlen($input) > 100) { die("Invalid input length."); } // 检查输入是否包含非法字符 if (preg_match('/[^ws]/', $input)) { die("Invalid input."); } // 处理正常的请求 // ... } ?>
Dengan mengesahkan dan menapis input pengguna, kami boleh melindungi aplikasi kami daripada input berniat jahat dengan lebih baik.
Menetapkan tamat masa yang munasabah boleh menghalang permintaan jangka panjang daripada mengambil terlalu banyak sumber pelayan. Kami boleh menetapkan had masa yang munasabah sebelum memproses permintaan Jika masa pelaksanaan skrip melebihi had ini, pelaksanaan skrip akan ditamatkan dan mesej ralat yang sesuai akan dikembalikan.
Berikut ialah contoh kod yang menunjukkan cara untuk menetapkan tamat masa:
<?php set_time_limit(5); // 设置超时时间为5秒 // 处理请求 // ... ?>
Dengan menetapkan tamat masa yang sesuai, kita boleh mengelakkan skrip berjalan lama mengambil terlalu banyak sumber pelayan.
Untuk meringkaskan, untuk melindungi aplikasi PHP daripada serangan penafian perkhidmatan, kami boleh mengambil beberapa langkah untuk mengehadkan sambungan serentak, mengesahkan input pengguna dan menetapkan tamat masa yang munasabah. Sudah tentu, ini hanyalah beberapa kaedah asas, dan strategi pertahanan khusus perlu diselaraskan dan diperbaiki mengikut situasi sebenar. Walau bagaimanapun, mengambil langkah berjaga-jaga ini boleh meningkatkan keselamatan aplikasi anda dengan ketara dan menghalang serangan DoS daripada memberi kesan teruk kepada sistem anda.
Atas ialah kandungan terperinci Cara Menghalang Aplikasi PHP daripada Serangan Penafian Perkhidmatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!