Rumah >pembangunan bahagian belakang >masalah PHP >Cara menggunakan PHP untuk melaksanakan fungsi kod pengesahan log masuk pengguna

Cara menggunakan PHP untuk melaksanakan fungsi kod pengesahan log masuk pengguna

PHPz
PHPzasal
2023-04-21 09:09:332049semak imbas

Dengan perkembangan teknologi rangkaian, isu keselamatan laman web telah menarik lebih banyak perhatian. Sebagai pembangun laman web, kami perlu memastikan keselamatan maklumat akaun pengguna dan privasi peribadi. Antaranya, keselamatan proses log masuk pengguna juga sangat penting. Untuk melindungi keselamatan akaun pengguna, kami perlu menambah fungsi kod pengesahan pada halaman log masuk pengguna. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi kod pengesahan log masuk pengguna.

  1. Apakah itu kod pengesahan

Kod pengesahan ialah teknologi yang membezakan manusia dan program komputer, yang boleh menghalang penyerang berniat jahat daripada menggunakan program automatik untuk melancarkan serangan pada tapak web dengan berkesan. Kod pengesahan biasa datang dalam bentuk yang berbeza seperti nombor, huruf, grafik, dsb. Pengguna perlu memasukkan kod pengesahan dengan betul semasa log masuk untuk mengesahkan identiti pengguna.

Dalam pembangunan tapak web, kod pengesahan biasanya dibenamkan dalam sistem log masuk untuk menghalang pengguna berniat jahat daripada mendapatkan kebenaran sistem melalui pemecahan kekerasan dan kaedah lain. Pada masa yang sama, kod pengesahan juga boleh menghalang pengguna yang berniat jahat daripada menggunakan program automatik untuk menyerang dan menyikat data.

  1. Buat kod pengesahan PHP

Dalam PHP, anda boleh menggunakan perpustakaan sambungan GD untuk melukis pelbagai kod pengesahan, termasuk nombor, huruf, grafik, dsb. Di bawah ini kami mengambil kod pengesahan berangka dan abjad sebagai contoh untuk memperkenalkan cara membuat kod pengesahan dalam PHP.

2.1. Penjanaan kod pengesahan digital

Kod pengesahan digital ialah bentuk paling asas untuk membuat kod pengesahan dan yang paling biasa. Kod pengesahan berangka boleh dijana menggunakan fungsi dalam pustaka GD. Di bawah ialah kod sampel yang menjana kod pengesahan 4 digit rawak.

<?php
session_start(); // 开启 session

header(&#39;Content-type: image/png&#39;); // 设置 Content-type

$im = imagecreatetruecolor(80, 40); // 创建一个宽为80,高为40的验证码背景图
$bgColor = imagecolorallocate($im, 255, 255, 255); // 设置背景色为白色
imagefill($im, 0, 0, $bgColor); // 绘制背景

$code = rand(1000, 9999); // 随机生成一个 4 位数的验证码
$_SESSION[&#39;code&#39;] = $code; // 把验证码存储在 Session 中,以便在其他页面中使用

$textColor = imagecolorallocate($im, 0, 0, 0); // 设置验证码颜色

imagestring($im, 5, 20, 12, $code, $textColor); // 绘制验证码

imagepng($im); // 输出 PNG 图片
imagedestroy($im); // 释放内存
?>

Analisis:

  • Pertama, kami membolehkan fungsi sesi PHP menggunakan kod pengesahan pada halaman lain.
  • Kemudian, kami menentukan jenis MIME kod pengesahan sebagai imej/png, memberitahu penyemak imbas bahawa fail itu ialah fail imej PNG.
  • Seterusnya, kami menggunakan fungsi imagecreatetruecolor untuk mencipta imej kosong dengan lebar 80 dan ketinggian 40.
  • Kemudian kami menetapkan latar belakang putih menggunakan fungsi imagecolorallocate dan mengisi keseluruhan imej menggunakan fungsi imagefill.
  • Selepas itu, kami menjana kod pengesahan 4 digit rawak dan menyimpannya dalam sesi.
  • Akhir sekali, kami menggunakan fungsi rentetan imej untuk melukis kod pengesahan dalam imej, dan menggunakan fungsi imagepng untuk mengeluarkan imej PNG yang dijana, dan kemudian memusnahkan sumber imej untuk melepaskan memori.

2.2. Penjanaan kod pengesahan bercampur abjad angka

Kod pengesahan berangka terdedah kepada serangan, jadi untuk meningkatkan keselamatan, kami boleh menggunakan borang kod pengesahan bercampur abjad angka. Begitu juga, kita boleh melukis captcha alfanumerik menggunakan perpustakaan GD PHP. Di bawah ialah kod sampel yang menjana kod pengesahan alfanumerik 4 digit rawak.

<?php
session_start(); // 开启 session

header(&#39;Content-type: image/png&#39;); // 设置 Content-type

$im = imagecreatetruecolor(100, 40); // 创建一个宽为100,高为40的验证码背景图
$bgColor = imagecolorallocate($im, 255, 255, 255); // 设置背景色为白色
imagefill($im, 0, 0, $bgColor); // 绘制背景

// 字母数字集
$chars = &#39;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;;
$len = strlen($chars);
$code = &#39;&#39;;
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[rand(0, $len-1)];
}

$_SESSION[&#39;code&#39;] = $code; // 把验证码存储在 Session 中,以便在其他页面中使用

$textColor = imagecolorallocate($im, 0, 0, 0); // 设置验证码颜色

// 使用随机字体和位置,绘制验证码
for ($i = 0; $i < 4; $i++) {
    $font = rand(1, 5); // 随机选择字体
    $angle = rand(-20, 20); // 随机旋转角度
    $x = $i * 20 + rand(0, 10); // 规定较小的x坐标值和x步进值,y的值也可以自定义 
    $y = rand(20, 30);
    $fontColor = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
    $char = substr($code, $i, 1);
    imagettftext($im, 18, $angle, $x, $y, $fontColor, __DIR__.&#39;/font&#39;.$font.&#39;.ttf&#39;, $char);
}

imagepng($im); // 输出 PNG 图片
imagedestroy($im); // 释放内存
?>

Analisis:

  • Berbeza daripada kaedah penjanaan kod pengesahan berangka, kod pengesahan bercampur abjad angka perlu terlebih dahulu mentakrifkan satu set aksara yang terdiri daripada nombor dan huruf, dan kemudian secara rawak Dapatkan aksara.
  • Kemudian, kami menyimpan kod pengesahan dalam sesi menggunakan kaedah yang sama. Lukisan aksara
  • pada asasnya sama dengan kod pengesahan digital, tetapi fail fon ttf perlu diperkenalkan untuk menjana huruf. Kami memilih fon dan kedudukan lukisan secara rawak dan menggunakan fungsi imagettftext untuk melukis aksara.
  1. Gunakan kod pengesahan di tapak web

Selepas menjana kod pengesahan, anda hanya perlu memperkenalkan program untuk menjana kod pengesahan dalam log masuk pengguna muka surat. Semasa mengesahkan input pengguna bagi maklumat akaun dan kata laluan, ia juga perlu untuk mengesahkan sama ada kod pengesahan yang dimasukkan oleh pengguna adalah betul.

Berikut ialah contoh kod untuk halaman log masuk pengguna.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form action="login.php" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password"><br>

        <label for="code">Code:</label>
        <input type="text" id="code" name="code"><br>
        <img src="captcha.php" alt="Captcha">

        <button type="submit">Submit</button>
    </form>
</body>
</html>

Sama seperti halaman log masuk pengguna biasa, kami menambah bahagian kod pengesahan semasa memasukkan akaun dan kata laluan, dan memperkenalkan program penjanaan kod pengesahan captcha.php. Selepas pengguna memasukkan nombor akaun, kata laluan dan kod pengesahan, klik butang hantar, dan sistem akan menyerahkan maklumat yang dimasukkan oleh pengguna untuk login.php untuk pengesahan.

Berikut ialah kod dalam login.php, yang digunakan untuk mengesahkan sama ada nombor akaun, kata laluan dan maklumat kod pengesahan yang dimasukkan oleh pengguna adalah betul.

<?php
session_start();

$username = $_POST[&#39;username&#39;];
$password = $_POST[&#39;password&#39;];
$code = $_POST[&#39;code&#39;];

// 验证用户输入的验证码是否正确
if (strtolower($code) !== strtolower($_SESSION[&#39;code&#39;])) {
    echo &#39;Invalid Code.&#39;;
    exit;
}

// 验证用户输入的账号和密码是否正确
if ($username === &#39;admin&#39; && $password === &#39;admin&#39;) {
    echo &#39;Login Successfully.&#39;;
} else {
    echo &#39;Invalid Username or Password.&#39;;
}
?>

Dalam login.php, kami mula-mula mengesahkan sama ada kod pengesahan yang dimasukkan oleh pengguna adalah betul. Jika kod pengesahan tidak sepadan, pengguna digesa untuk memasukkan kod pengesahan yang tidak sah dan keluar dari pengesahan log masuk. Jika tidak, kami mengesahkan sama ada maklumat akaun dan kata laluan yang dimasukkan oleh pengguna adalah betul. Jika betul, pengguna akan digesa untuk log masuk dengan jayanya, jika tidak, ia akan digesa bahawa nama pengguna atau kata laluan adalah tidak sah.

  1. Ringkasan

Artikel ini memperkenalkan cara menggunakan perpustakaan PHP dan GD untuk menjana kod pengesahan angka dan abjad angka bercampur, dan menggunakan kod pengesahan dalam tapak web untuk memastikan log masuk pengguna Keselamatan maklumat. Melalui mengkaji artikel ini, anda telah mempelajari cara untuk menghalang pengguna berniat jahat daripada menggunakan program automatik untuk menyerang tapak web anda, dan melindungi akaun dan privasi peribadi pengguna tapak web.

Atas ialah kandungan terperinci Cara menggunakan PHP untuk melaksanakan fungsi kod pengesahan log masuk pengguna. 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