ホームページ >バックエンド開発 >PHPの問題 >PHPを使用してユーザーログイン認証コード機能を実装する方法

PHPを使用してユーザーログイン認証コード機能を実装する方法

PHPz
PHPzオリジナル
2023-04-21 09:09:332049ブラウズ

ネットワーク技術の発展に伴い、Web サイトのセキュリティ問題はますます注目を集めています。 Web サイト開発者として、ユーザーのアカウント情報と個人のプライバシーのセキュリティを確保する必要があります。その中で、ユーザーのログインプロセスのセキュリティも非常に重要です。ユーザー アカウントのセキュリティを保護するために、ユーザーのログイン ページに確認コード機能を追加する必要があります。この記事では、PHPを使用してユーザーログイン認証コード機能を実装する方法を紹介します。

  1. 検証コードとは

検証コードは人間とコンピューター プログラムを区別するテクノロジーであり、悪意のある攻撃者が自動プログラムを使用して Web サイトに攻撃を仕掛けることを効果的に防ぐことができます。一般的な確認コードには、数字、文字、グラフィックなどのさまざまな形式があります。ユーザーは、ログイン時に確認コードを正しく入力して、ユーザーの身元を確認する必要があります。

Web サイト開発では、通常、悪意のあるユーザーが総当たりクラッキングやその他の方法でシステム権限を取得するのを防ぐために、ログイン システムに検証コードが埋め込まれます。同時に、検証コードは、悪意のあるユーザーが自動プログラムを使用してデータを攻撃したり消去したりすることを防ぐこともできます。

  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. Web サイトで確認コードを使用する

確認コードを生成した後は、ユーザー ログインに確認コードを生成するプログラムを導入するだけです。ページ。ユーザーのアカウントとパスワード情報の入力を確認すると同時に、ユーザーが入力した確認コードが正しいかどうかも確認する必要があります。

以下は、ユーザー ログイン ページのサンプル コードです。

<!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 ライブラリを使用して数字と英数字の混合検証コードを生成し、Web サイトで検証コードを使用してユーザーのログインのセキュリティを確保する方法を紹介します。情報。この記事を学習することで、悪意のあるユーザーが自動プログラムを使用して Web サイトを攻撃するのを防ぎ、Web サイト ユーザーのアカウントと個人のプライバシーを保護する方法を学びました。

以上がPHPを使用してユーザーログイン認証コード機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。