>백엔드 개발 >PHP 문제 >PHP를 사용하여 사용자 로그인 인증 코드 기능을 구현하는 방법

PHP를 사용하여 사용자 로그인 인증 코드 기능을 구현하는 방법

PHPz
PHPz원래의
2023-04-21 09:09:332054검색

네트워크 기술의 발전으로 웹사이트 보안 문제가 점점 더 주목받고 있습니다. 웹사이트 개발자로서 우리는 사용자의 계정 정보와 개인정보의 보안을 보장해야 합니다. 그 중에서도 사용자 로그인 프로세스의 보안도 매우 중요합니다. 사용자 계정의 보안을 보호하기 위해 사용자 로그인 페이지에 인증 코드 기능을 추가해야 합니다. 이 기사에서는 PHP를 사용하여 사용자 로그인 인증 코드 기능을 구현하는 방법을 소개합니다.

  1. 인증코드란 무엇인가요

인증코드는 인간과 컴퓨터 프로그램을 구별하는 기술로, 악의적인 공격자가 자동화된 프로그램을 사용하여 웹사이트를 공격하는 것을 효과적으로 방지할 수 있습니다. 일반적인 인증코드는 숫자, 문자, 그래픽 등 다양한 형태로 제공됩니다. 사용자는 본인 확인을 위해 로그인 시 인증코드를 정확하게 입력해야 합니다.

웹사이트 개발에서는 일반적으로 악의적인 사용자가 무차별 대입 크래킹 및 기타 방법을 통해 시스템 권한을 얻는 것을 방지하기 위해 확인 코드가 로그인 시스템에 내장되어 있습니다. 동시에 확인 코드는 악의적인 사용자가 자동화된 프로그램을 사용하여 데이터를 공격하고 브러싱하는 것을 방지할 수도 있습니다.

  1. PHP 인증 코드 만들기

PHP에서는 GD 확장 라이브러리를 사용하여 숫자, 문자, 그래픽 등 다양한 인증 코드를 그릴 수 있습니다. 아래에서는 숫자와 알파벳순의 인증코드를 예로 들어 PHP에서 인증코드를 만드는 방법을 소개합니다.

2.1.디지털 인증코드 생성

디지털 인증코드는 인증코드를 만드는 가장 기본적인 형태이자 가장 일반적인 형태입니다. 숫자 인증 코드는 GD 라이브러리의 기능을 사용하여 생성할 수 있습니다. 다음은 임의의 4자리 인증 코드를 생성하는 샘플 코드입니다.

<?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); // 释放内存
?>

분석:

  • 먼저 PHP의 세션 기능을 활성화하여 다른 페이지에서 인증 코드를 사용할 수 있도록 합니다.
  • 그런 다음 인증 코드의 MIME 유형을 image/png로 지정하여 해당 파일이 PNG 이미지 파일임을 브라우저에 알립니다.
  • 다음으로 imagecreatetruecolor 함수를 사용하여 너비가 80이고 높이가 40인 빈 이미지를 만듭니다.
  • 그런 다음 imagecolorallocate 함수를 사용하여 흰색 배경을 설정하고 imagefill 함수를 사용하여 전체 이미지를 채웁니다.
  • 이후 무작위 4자리 인증코드를 생성하여 세션에 저장합니다.
  • 마지막으로 imagestring 함수를 이용해 이미지에 인증코드를 그려넣고, imagepng 함수를 이용해 생성된 PNG 이미지를 출력한 뒤, 이미지 리소스를 파기하고 메모리를 해제했습니다.

2.2.영숫자 혼합 인증코드 생성

숫자 인증코드는 공격에 취약하므로 보안 강화를 위해 영숫자 혼합 인증코드 형태를 사용할 수 있습니다. 마찬가지로 PHP의 GD 라이브러리를 사용하여 영숫자 보안 문자를 그릴 수 있습니다. 다음은 임의의 4자리 영숫자 확인 코드를 생성하는 샘플 코드입니다.

<?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); // 释放内存
?>

분석:

  • 숫자 인증코드 생성 방식과 다르게, 영숫자 혼합 인증코드는 먼저 숫자와 문자로 구성된 문자 집합을 정의한 후 무작위로 문자를 얻어야 합니다.
  • 그런 다음 동일한 방법을 사용하여 세션에 인증 코드를 저장합니다.
  • 문자 그리기는 기본적으로 디지털 인증코드와 동일하지만, 문자를 생성하려면 ttf 글꼴 파일을 도입해야 합니다. 글꼴과 그리기 위치를 무작위로 선택하고 imagettftext 함수를 사용하여 문자를 그립니다.
  1. 웹사이트에서 인증코드를 사용하세요

인증코드를 생성한 후, 사용자 로그인 페이지에서 인증코드를 생성하는 프로그램을 소개하기만 하면 됩니다. 사용자의 계정 및 비밀번호 정보 입력을 확인하는 동시에, 사용자가 입력한 인증번호가 올바른지 확인하는 것도 필요합니다.

다음은 사용자 로그인 페이지의 샘플 코드입니다.

<!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>

일반 사용자 로그인 페이지와 유사하게 계정과 비밀번호 입력 시 인증코드 부분을 추가하였고, 인증코드 생성 프로그램 captcha.php를 도입하였습니다. 사용자가 계좌번호, 비밀번호, 인증코드를 입력한 후 제출 버튼을 클릭하면 시스템은 사용자가 입력한 정보를 login.php에 제출하여 인증합니다.

다음은 사용자가 입력한 계좌번호, 비밀번호, 인증코드 정보가 맞는지 확인하는데 사용되는 login.php의 코드입니다.

<?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;;
}
?>

login.php에서는 먼저 사용자가 입력한 인증번호가 맞는지 확인합니다. 인증 코드가 일치하지 않으면 잘못된 인증 코드를 입력하고 로그인 인증을 종료하라는 메시지가 사용자에게 표시됩니다. 그렇지 않은 경우에는 사용자가 입력한 계정 및 비밀번호 정보가 올바른지 확인합니다. 정보가 정확하면 사용자에게 성공적으로 로그인하라는 메시지가 표시되고, 그렇지 않으면 사용자 이름이나 비밀번호가 유효하지 않다는 메시지가 표시됩니다.

  1. 요약

이 글에서는 PHP 및 GD 라이브러리를 사용하여 숫자 및 영숫자 혼합 확인 코드를 생성하는 방법과 웹사이트에서 확인 코드를 사용하여 사용자 로그인 정보의 보안을 보장하는 방법을 소개합니다. 이 기사를 연구하면서 악의적인 사용자가 자동화된 프로그램을 사용하여 웹 사이트를 공격하는 것을 방지하고 웹 사이트 사용자의 계정과 개인 정보를 보호하는 방법을 배웠습니다.

위 내용은 PHP를 사용하여 사용자 로그인 인증 코드 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.