Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penapisan data PHP: berkesan menghalang meneka kata laluan

Penapisan data PHP: berkesan menghalang meneka kata laluan

王林
王林asal
2023-07-30 13:13:101145semak imbas

Penapisan Data PHP: Mencegah teka kata laluan secara berkesan

Dalam persekitaran rangkaian hari ini, keselamatan adalah penting. Sebagai pembangun, kami mesti melindungi privasi pengguna dan keselamatan data pada setiap masa. Terutama apabila ia berkaitan dengan kata laluan pengguna, serangan meneka kata laluan adalah kaedah serangan yang sangat biasa. Untuk mengelakkan serangan meneka kata laluan, kami perlu melakukan kerja yang baik dalam penapisan data. Artikel ini akan memperkenalkan cara menggunakan PHP untuk mencegah serangan meneka kata laluan dengan berkesan dan menyediakan beberapa contoh kod praktikal.

1. Prinsip Serangan Meneka Kata Laluan

Serangan meneka kata laluan ialah apabila penyerang meneka kata laluan pengguna dengan mencuba kombinasi kata laluan yang berbeza. Penyerang akan menggunakan alat automatik untuk menghitung semua kata laluan yang mungkin sehingga mereka menemui kata laluan yang betul. Kaedah serangan ini boleh mendapatkan kata laluan pengguna dengan cepat, jadi ia sangat berbahaya. Untuk mengelakkan serangan meneka kata laluan, kita boleh menggunakan kaedah berikut.

2. Pengesahan kekuatan kata laluan

Kaedah pertama adalah untuk menghalang serangan meneka kata laluan dengan mengesahkan kekuatan kata laluan. Kami boleh menentukan beberapa peraturan kekuatan kata laluan, contohnya, panjang kata laluan mestilah dalam julat tertentu dan mesti mengandungi huruf, nombor, aksara khas, dsb. Apabila pengguna mendaftar atau menukar kata laluan mereka, kami boleh menggunakan fungsi ekspresi biasa PHP preg_match() untuk menyemak sama ada kata laluan itu mematuhi peraturan kekuatan kami. Berikut ialah contoh kod:

$password = $_POST['password'];

$pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{8,}$/';

if(preg_match($pattern, $password)){
   // 密码符合强度规则
   // 将密码存储到数据库或进行其他操作
} else {
   // 密码不符合强度规则
   // 给用户提示错误信息
}

Dalam kod di atas, kami menggunakan ungkapan biasa untuk menentukan peraturan kekuatan kata laluan. Ungkapan biasa ini memerlukan kata laluan sekurang-kurangnya 8 aksara panjang dan mesti mengandungi sekurang-kurangnya satu huruf kecil, satu huruf besar, satu nombor dan satu aksara khas. Jika kata laluan pengguna memenuhi peraturan kekuatan ini, maka kami boleh terus menyimpan kata laluan atau melakukan operasi lain. Jika tidak, kami memberi pengguna mesej ralat.

3. Hadkan bilangan log masuk

Kaedah kedua ialah menghalang serangan meneka kata laluan dengan mengehadkan bilangan log masuk pengguna. Kami boleh menetapkan had pada bilangan log masuk yang gagal, contohnya, hanya membenarkan pengguna gagal log masuk 3 kali dalam julat masa tertentu. Jika pengguna gagal log masuk secara berterusan untuk beberapa kali terhad, kami boleh mengunci akaun pengguna buat sementara waktu. Berikut ialah contoh kod:

$username = $_POST['username'];
$password = $_POST['password'];

// 获取用户登录失败次数和上次登录失败的时间
$getFailedLoginInfo = "SELECT failed_login_count, last_failed_login FROM users WHERE username='$username'";
// 执行查询

$failedLoginCount = $getFailedLoginInfo['failed_login_count'];
$lastFailedLogin = $getFailedLoginInfo['last_failed_login'];

if($failedLoginCount >= 3 && time() - $lastFailedLogin < 3600){
   // 用户登录失败次数已达到限制,并且上次登录失败的时间小于1小时
   // 暂时锁定用户账号
   // 给用户提示错误信息
} else {
   // 用户登录失败次数未达到限制或上次登录失败的时间超过1小时
   // 进行密码验证和其他操作
}

Dalam kod di atas, kami mula-mula memperoleh bilangan log masuk pengguna yang gagal dan masa log masuk gagal terakhir daripada pangkalan data. Jika bilangan log masuk pengguna yang gagal telah mencapai had dan log masuk gagal terakhir adalah kurang daripada 1 jam, kami boleh mengunci akaun pengguna buat sementara waktu. Jika tidak, kami boleh melakukan pengesahan kata laluan dan operasi lain.

4. Pengesahan kod pengesahan

Kaedah ketiga ialah menggunakan pengesahan kod pengesahan untuk mengelakkan serangan meneka kata laluan. Kami boleh meminta pengguna memasukkan kod pengesahan sebelum log masuk atau melakukan operasi sensitif. Kod pengesahan boleh berupa imej atau rentetan teks dan pengguna perlu memasukkan kod pengesahan dengan betul untuk meneruskan. Berikut ialah contoh kod:

session_start();

if($_POST['captcha'] != $_SESSION['captcha']){
   // 验证码不正确
   // 给用户提示错误信息
} else {
   // 验证码正确
   // 进行密码验证和其他操作
}

Dalam kod di atas, kami mula-mula memulakan sesi dan menyimpan kod pengesahan dalam pembolehubah sesi. Apabila pengguna menyerahkan borang log masuk, kami membandingkan kod pengesahan yang dimasukkan oleh pengguna dengan kod pengesahan yang disimpan dalam sesi. Jika kod pengesahan tidak betul, maka kami memberi pengguna mesej ralat. Jika tidak, kami boleh melakukan pengesahan kata laluan dan operasi lain.

Ringkasan

Dalam artikel ini, kami memperkenalkan tiga kaedah untuk mencegah serangan teka kata laluan dengan berkesan: pengesahan kekuatan kata laluan, had log masuk dan pengesahan kod pengesahan. Dengan menggunakan kaedah ini dengan sewajarnya, kami boleh meningkatkan keselamatan kata laluan pengguna dan melindungi privasi pengguna dan keselamatan data. Dalam pembangunan sebenar, kita boleh memilih kaedah yang sesuai untuk mengelakkan serangan meneka kata laluan mengikut keperluan.

Walau bagaimanapun, perlu diingatkan bahawa kaedah ini hanya meningkatkan kesukaran serangan meneka kata laluan dan tidak dapat menghapuskan sepenuhnya serangan meneka kata laluan. Oleh itu, kami juga perlu mengambil langkah keselamatan tambahan, seperti menggunakan protokol HTTPS untuk memindahkan data, mengemas kini cincang kata laluan secara kerap, dsb. Melalui aplikasi komprehensif pelbagai langkah perlindungan, kami boleh melindungi privasi dan keselamatan data pengguna dengan lebih baik.

Atas ialah kandungan terperinci Penapisan data PHP: berkesan menghalang meneka kata laluan. 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