Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan terbaik untuk mencegah serangan pendaftaran dalam PHP

Amalan terbaik untuk mencegah serangan pendaftaran dalam PHP

王林
王林asal
2023-08-26 23:43:45691semak imbas

Amalan terbaik untuk mencegah serangan pendaftaran dalam PHP

Amalan Terbaik untuk Serangan Pendaftaran Anti-Flash PHP

Dengan perkembangan Internet, fungsi pendaftaran menjadi semakin biasa dalam pelbagai laman web dan aplikasi. Tetapi pada masa yang sama, fungsi pendaftaran juga telah menjadi pintu masuk yang sering dieksploitasi oleh penyerang. Antaranya, kaedah serangan yang paling biasa ialah pendaftaran dan serangan meleret akaun, iaitu, penyerang membuat sejumlah besar permintaan pendaftaran melalui program automatik, dengan itu menduduki sumber pelayan dan mengganggu perkhidmatan biasa. Untuk memerangi serangan ini, terdapat beberapa amalan terbaik yang boleh kami pakai untuk menjamin kefungsian pendaftaran kami.

  1. Tambah pengesahan interaksi anti-manusia

Serangan memberus pendaftaran biasa dicirikan dengan menggunakan program automatik untuk membuat permintaan pendaftaran Program ini biasanya menyelesaikan semua proses pendaftaran dengan cepat, manakala pengguna sebenar memerlukan masa dan interaksi tertentu untuk diselesaikan. Pendaftaran automatik boleh dihalang dengan berkesan dengan menambahkan pengesahan interaksi anti-manusia. Memasukkan kod pengesahan, menyeret peluncur, mengesahkan nombor telefon, dsb. adalah semua kaedah pengesahan interaksi anti-manusia biasa.

Sebagai contoh, Google reCAPTCHA boleh digunakan untuk menambah pengesahan captcha. Mula-mula, daftar akaun di tapak web rasmi Google reCAPTCHA (https://www.google.com/recaptcha/intro/v3.html) dan dapatkan kunci API yang sepadan. Kemudian, benamkan kod pengesahan reCAPTCHA dalam halaman pendaftaran, seperti yang ditunjukkan di bawah:

<script src="https://www.google.com/recaptcha/api.js?render=你的Site Key"></script>
<form method="post" action="register.php">
  <!-- 用户名、密码等注册字段 -->
  <div class="g-recaptcha" data-sitekey="你的Site Key"></div>
  <button type="submit">注册</button>
</form>
<script>
grecaptcha.ready(function() {
  grecaptcha.execute('你的Site Key', {action: 'register'}).then(function(token) {
    // 将token与其他注册数据一起提交到服务器
  });
});
</script>

Sahkan respons reCAPTCHA di sebelah pelayan Kod sampel adalah seperti berikut:

<?php
$secretKey = "你的Secret Key";
$response = $_POST['g-recaptcha-response'];
$remoteIp = $_SERVER['REMOTE_ADDR'];

$url = "https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$response."&remoteip=".$remoteIp;
$response_json = file_get_contents($url);
$response_data = json_decode($response_json, true);

if($response_data['success'] == true) {
  // 验证通过,进行注册操作
  // ...
} else {
  // 验证失败,显示错误信息
  // ...
}
?>
  1. Hadkan kelajuan pendaftaran

Satu lagi ciri ciri tersebut. serangan memberus pendaftaran adalah Sebilangan besar permintaan pendaftaran dihantar secara berterusan dalam tempoh masa yang singkat. Dengan mengehadkan kelajuan pendaftaran, kami boleh memperlahankan kesan serangan dengan berkesan.

Sebagai contoh, anda boleh merekodkan bilangan pendaftaran untuk setiap alamat IP dalam tempoh baru-baru ini dan mengehadkannya. Berikut ialah contoh kod:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$time_range = 60; // 限制时间范围(秒)
$max_register = 5; // 最大注册次数

// 从数据库或其他存储方式中获取IP地址相关的注册次数和时间戳
// ...

if($register_count >= $max_register) {
  $remaining_time = $time_range - (time() - $last_register_time);
  die("注册次数过多,请等待".$remaining_time."秒后再尝试。");
}

// 新增注册记录到数据库或其他存储方式
// ...
?>
  1. Keperluan kata laluan yang kukuh

Salah satu tujuan serangan memberus pendaftaran adalah untuk mendapatkan sejumlah besar akaun pengguna untuk digunakan dalam tingkah laku berniat jahat yang lain. Untuk mengelakkan penggunaan kata laluan mudah, kami boleh meminta pengguna menetapkan kata laluan yang kukuh.

Sebagai contoh, kami boleh meminta kata laluan tidak kurang daripada 8 aksara panjang dan mengandungi huruf besar dan kecil, nombor, aksara khas, dsb. Berikut ialah contoh kod:

<?php
$password = $_POST['password'];

if(strlen($password) < 8 || !preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@#$%!^&*()-_=+{}~|/<>?]).*$/', $password)) {
  die("密码太弱,请选择更强的密码。");
}

// 注册用户并保存密码到数据库或其他存储方式
// ...
?>

Di atas ialah beberapa amalan terbaik untuk mencegah serangan pendaftaran PHP Kita boleh memilih untuk menggunakan kaedah pelaksanaan yang berbeza mengikut keperluan dan situasi tertentu. Dengan menambahkan pengesahan interaksi anti-manusia, mengehadkan kelajuan pendaftaran dan memerlukan kata laluan yang kukuh, kami boleh meningkatkan keselamatan fungsi pendaftaran dengan berkesan dan menghalang kesan tidak wajar serangan meleret pendaftaran pada pelayan.

Atas ialah kandungan terperinci Amalan terbaik untuk mencegah serangan pendaftaran dalam PHP. 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