ホームページ バックエンド開発 PHPの問題 PHPで認証コードの位置を変更する方法

PHPで認証コードの位置を変更する方法

Apr 04, 2023 pm 05:28 PM

Web サイトの発展に伴い、多くの Web サイトでの登録またはログインに必要なセキュリティ対策として検証コードが使用されるようになりました。ただし、検証コードの場所が設計要件を満たしていない場合があるため、今日は PHP で検証コードの場所を変更する方法について説明します。

まず、検証コードの生成原理を理解する必要があります。通常、検証コードは GD ライブラリを使用して PHP スクリプトで生成されます。GD ライブラリには、imagecreate()、imagecolorallocate()、imagestring() などの検証コードを生成するための関数が用意されています。

次に、これらの機能について説明します。別の検証コード生成方法を使用している場合は、その生成原理に従って変更できます。

  1. 指定された場所に検証コードを配置します

検証コードは imagestring() 関数を通じてキャンバスに出力でき、それを使用して確認コードの場所。

以下は基本的な検証コード生成スクリプトです:

<?php
session_start();
header("Content-type: image/png");

$code_len = 4;
$width = 80;
$height = 25;

$charset = &#39;abcdefghkmnprstuvwxyABCDEFGHKMNPRSTUVWXY3456789&#39;;
$code = &#39;&#39;;
for ($i = 0; $i < $code_len; $i++) {
    $code .= $charset[mt_rand(0, strlen($charset) - 1)];
}
$_SESSION[&#39;verify_code&#39;] = strtoupper($code);

$img = imagecreate($width, $height);
imagecolorallocate($img, 255, 255, 255);  //设置背景颜色

$font_color = imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
for ($i = 0; $i < $code_len; $i++) {
    $font_size = mt_rand(12, 16);
    $angle = mt_rand(-10, 10);
    $f_x = ($width / $code_len) * $i + mt_rand(0, 5);
    $f_y = $height / 2 + mt_rand(-5, 6);

    imagestring($img, $font_size, $f_x, $f_y, $code[$i], $font_color);  //输出验证码
}

imagepng($img);
imagedestroy($img);
ログイン後にコピー

上記のコードでは、キャンバス上のランダムな位置に検証コードが出力されます。指定した場所の検証コードを修正したい場合は、設計要件に従って $f_x$f_y の値を変更するだけです。

たとえば、キャンバスの中央にある検証コードを修正する場合、$f_x$f_y の値を次のように変更するだけです。次のとおりです:

$f_x = ($width / 2 - (($font_size + 3) * $code_len) / 2) + ($font_size + 3) * $i;  // 控制水平方向位置
$f_y = $height / 2 + mt_rand(-5, 6);  // 控制竖直方向位置
ログイン後にコピー

実行後、キャンバスの中央に確認コードが表示されます。

  1. 指定された HTML 要素内に検証コードを配置します

指定された HTML 要素内に検証コードを配置する場合は、次のようにしてキャンバスの位置を制御できます。 CSS および配置キャンバスは HTML 要素に埋め込まれます。

たとえば、検証コードを <div id="verify"> 要素内に配置する場合は、CSS に次のコードを追加できます: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">#verify {     position: relative;     background-color: #fff;  /* 图片背景色 */     width: 100px;     height: 32px;     text-align: center; } #verify img {     position: absolute;  /* 设置验证码图片位置 */     top: 0;     left: 0; }</pre><div class="contentsignin">ログイン後にコピー</div></div> <p>次に、HTML に次のコードを追加します。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;div id=&quot;verify&quot;&gt;     &lt;img src=&quot;verify.php&quot; alt=&quot;验证码&quot;&gt; &lt;/div&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div><p> 上記のコードにより、生成された検証コードを指定された要素に埋め込むことができ、その位置は CSS によって制御されます。 </p><ol start="3"><li>検証コードを背景に配置します</li></ol><p>場合によっては、背景に検証コードを配置する必要がある場合があります。たとえば、背景が大きな画像である場合などです。 , 私たち 確認コードは画面の隅に配置する必要があります。 </p><p>この関数を実装するには、まず検証コードなしで背景画像を生成し、次に検証コードを背景に描画します。 </p><p>以下は基本的な実装です: </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;?php session_start(); header(&quot;Content-type: image/png&quot;); $width = 300; $height = 200; $img = imagecreate($width, $height); imagecolorallocate($img, 255, 255, 255);  //设置背景颜色 // 生成不带验证码的背景图 $bg_img = imagecreatefromjpeg('bg.jpg'); imagecopy($img, $bg_img, 0, 0, 0, 0, $width, $height); $code_len = 4; $charset = 'abcdefghkmnprstuvwxyABCDEFGHKMNPRSTUVWXY3456789'; $code = ''; for ($i = 0; $i &lt; $code_len; $i++) {     $code .= $charset[mt_rand(0, strlen($charset) - 1)]; } $_SESSION['verify_code'] = strtoupper($code); // 将验证码写入背景图中 $font_color = imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100)); for ($i = 0; $i &lt; $code_len; $i++) {     $font_size = mt_rand(12, 16);     $angle = mt_rand(-10, 10);     $f_x = mt_rand(0, $width - ($font_size + 3));     $f_y = mt_rand(0, $height - $font_size);     imagestring($img, $font_size, $f_x, $f_y, $code[$i], $font_color);  //输出验证码 } imagepng($img); imagedestroy($img);</pre><div class="contentsignin">ログイン後にコピー</div></div><p>上記のコードでは、最初に元の背景画像 <code>bg.jpg をロードし、それから新しいキャンバスにコピーします。 、次に検証コードを生成し、キャンバスに挿入します。 (この例で生成された検証コードはランダムな位置にあることに注意してください。目的を達成するには、いくつかの変更を行う必要があります。)

  1. 概要

この記事のはじめに 検証コードの位置を変更するには、PHPで生成した検証コードを元に出力位置を変更して実装する方法と、HTML要素に検証コードキャンバスを埋め込む方法の3通りがあります。 3 つ目は、検証コードキャンバスを HTML 要素に埋め込み、CSS で位置を制御する方法 1 つ目は、検証コードの位置が一致するように背景に検証コードを追加する方法背景。さまざまな実装方法がさまざまなシナリオに適しており、実際のニーズに応じて最適なソリューションを選択できます。

以上がPHPで認証コードの位置を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 Mar 25, 2025 am 10:37 AM

PHP 8のJITコンピレーションは、頻繁に実行されるコードをマシンコードにコンパイルし、重い計算でアプリケーションに利益をもたらし、実行時間を短縮することにより、パフォーマンスを向上させます。

PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。 PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。 Mar 26, 2025 pm 04:18 PM

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。 OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。 Mar 26, 2025 pm 04:13 PM

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

PHP暗号化:対称と非対称暗号化。 PHP暗号化:対称と非対称暗号化。 Mar 25, 2025 pm 03:12 PM

この記事では、PHPの対称的および非対称暗号化について説明し、適合性、パフォーマンス、セキュリティの違いを比較しています。対称暗号化はより速く、バルクデータに適していますが、非対称は安全なキー交換に使用されます。

PHPを使用してデータベースからデータを取得するにはどうすればよいですか? PHPを使用してデータベースからデータを取得するにはどうすればよいですか? Mar 20, 2025 pm 04:57 PM

記事では、PHPを使用してデータベースからデータを取得し、手順、セキュリティ対策、最適化手法、およびソリューションを使用した一般的なエラーをカバーしています。

PHP認証&amp;承認:安全な実装。 PHP認証&amp;承認:安全な実装。 Mar 25, 2025 pm 03:06 PM

この記事では、不正アクセスを防ぎ、ベストプラクティスの詳細、セキュリティ強化ツールの推奨を防ぐために、PHPで堅牢な認証と承認の実装について説明します。

PHPで準備された声明の目的は何ですか? PHPで準備された声明の目的は何ですか? Mar 20, 2025 pm 04:47 PM

PHPの準備されたステートメントは、SQLインジェクションを防止し、コンピレーションと再利用を通じてクエリパフォーマンスを改善することにより、データベースのセキュリティと効率を強化します。

PHP APIレート制限:実装戦略。 PHP APIレート制限:実装戦略。 Mar 26, 2025 pm 04:16 PM

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

See all articles