ホームページ php教程 php手册 PHP は完全かつ安全なユーザー ログイン システムを開発します

PHP は完全かつ安全なユーザー ログイン システムを開発します

Jun 21, 2016 am 08:57 AM
hash name user

PHP でプログラミングするとき、私は PHPLib や他の同様のライブラリなどの既製のライブラリ ファイルを使用しない習慣があります。このシステムでは、認証を処理する必要があるライブラリ ファイルも自分で作成する予定です。電子メールの確認、アカウント (パスワード、電子メール) の更新など。

既存のデータベースへの負担を増やすことなくシステムのセキュリティを確保するため。したがって、この新しいシステムは Cookie に依存しています。これは確かにジレンマです。ユーザー名を使用して Cookie を設定するだけでは非常に安全ではないため、これは機能しませんが、データベースへの負担を考慮すると、単純な順序なしコードを追加して検証のためにデータベースに渡すことはできません。 。

解決策は、2 つの Cookie を同時に設定することです。1 つはユーザー名 Cookie、もう 1 つは順序なし Cookie です。この順序付けされていないコードは、実際には、md5() 関数操作を通じてユーザー名とスーパー パスワード (プログラマのみが知っている) の組み合わせによって生成されます。 md5() は一方向の不規則コードであるため、解読できません。ユーザーが電子メールを変更した場合、電子メールとスーパー パスワードを使用してランダム コードを生成し、ユーザーが変更を確認できるようにすることもできます。これは実際には公開鍵/秘密鍵タイプのシステムです。分かりませんか?関係ないので、以下ゆっくり解説していきます。

興味深いのは、このシステムの主な仕事は md5() 関数の値を計算することであり、負荷がかかると Web サーバーによって完了するため、このシステムのスケーラビリティは無限大に達する可能性があることです。認証システムがデータベース全体に影響を与えることはありませんが、追加することで最終的なボトルネックがデータベースにのみ現れることになります。

このライブラリには、トークン生成関数とトークン認証関数という 2 つの関数があります。

  <?php<br>    $hidden_hash_var='your_secret_password_here';<br>    $LOGGED_IN=false;<br>    unset($LOGGED_IN);<br>    function user_isloggedin() {<br>     global $user_name,$id_hash,$hidden_hash_var,$LOGGED_IN;<br>     file://已经进行无序码的检测了吗<br>     file://如果是的话,返回该变量<br>     if ( isset($LOGGED_IN) ) {<br>      return $LOGGED_IN;<br>      }<br>     file://are both cookies present?<br>     if ($user_name && $id_hash) {<br>     /*<br>      由cookies中得来的用户名和系统超级密码产生一个认证用的无序码如果该无序码与cookie中的无序码一样,则cookies中的变量是可信的,用户已经登录<br>     */<br>      $hash=md5($user_name.$hidden_hash_var);<br>      if ($hash == $id_hash) {<br>       file://无序码符合,设置一个全局变量,这样我们在再次调用该函数的时候,<br>       file://就无需再次进行md5()运算<br>       $LOGGED_IN=true;<br>       return true;<br>      } else {<br>       file://两个无序码不符合,没有登录<br>       $LOGGED_IN=false;<br>       return false;<br>      }<br>      } else {<br>       $LOGGED_IN=false;<br>       return false;<br>       }<br>      }<br>    function user_set_tokens($user_name_in) {<br>     /*<br>      一旦用户名和密码通过验证,就调用这个函数<br>     */<br>     global $hidden_hash_var,$user_name,$id_hash;<br>      if (!$user_name_in) {<br>       $feedback .= ' ERROR - User Name Missing When Setting Tokens ';<br>       return false;<br>       }<br>     $user_name=strtolower($user_name_in);<br>      file://使用用户名和超级密码创建一个无序码,作判断是否已经登录用<br>      $id_hash= md5($user_name.$hidden_hash_var);<br>      file://设置cookies的有效期为一个月,可设置为任何的值<br>      setcookie('user_name',$user_name,(time()+2592000),'/','',0);<br>      setcookie('id_hash',$id_hash,(time()+2592000),'/','',0);<br>     }<br>   ?>

別の興味深いコードを見てみましょう。ユーザーはどのようにしてメール アドレスを安全に変更できるでしょうか。電子メール アドレスはいつでも変更できますが、確認が必要です。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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でRedisハッシュ操作を実装する方法 PHPでRedisハッシュ操作を実装する方法 May 30, 2023 am 08:58 AM

ハッシュ演算 //ハッシュテーブルのフィールドに値を代入します。成功した場合は 1 を返し、失敗した場合は 0 を返します。ハッシュ テーブルが存在しない場合は、まずテーブルが作成されてから値が割り当てられ、フィールドが既に存在する場合は古い値が上書きされます。 $ret=$redis->hSet('user','realname','jetwu');//ハッシュ テーブル内の指定されたフィールドの値を取得します。ハッシュ テーブルが存在しない場合は false を返します。 $ret=$redis->hGet('ユーザー','rea

Laravel 開発: Laravel ハッシュを使用してパスワード ハッシュを生成するにはどうすればよいですか? Laravel 開発: Laravel ハッシュを使用してパスワード ハッシュを生成するにはどうすればよいですか? Jun 17, 2023 am 10:59 AM

Laravel は現在最も人気のある PHP Web フレームワークの 1 つであり、開発者に多くの強力な機能とコンポーネントを提供しており、LaravelHash もその 1 つです。 LaravelHash は、パスワードを安全に保ち、アプリケーションのユーザー データをより安全にするために使用できるパスワード ハッシュ用の PHP ライブラリです。この記事では、LaravelHash の仕組みと、LaravelHash を使用してパスワードをハッシュし検証する方法を学びます。 Lara を学習するための前提知識

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Docker マウントディレクトリの権限の問題を解決する方法 Docker マウントディレクトリの権限の問題を解決する方法 Feb 29, 2024 am 10:04 AM

Docker では、マウント ディレクトリの権限の問題は通常、-v パラメータを使用してマウント ディレクトリを指定するときに権限関連のオプションを追加することで解決できます。マウントされたディレクトリのアクセス許可を指定するには、マウントされたディレクトリの後に ro または :rw を追加します。それぞれ、読み取り専用と読み取り/書き込みアクセス許可を示します。例: dockerrun-v/host/path:/container/path:roimage_name Dockerfile で USER ディレクティブを定義してコンテナ内で実行するユーザーを指定し、コンテナ内での操作が権限要件に準拠していることを確認します。例: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

ハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解する ハッシュ アルゴリズムとアプリケーション シナリオを 1 つの記事で理解する Apr 13, 2023 am 11:55 AM

1. ハッシュアルゴリズムとは? ハッシュとハッシングはどちらもハッシュという言葉から来ており、前者は音訳、後者は意訳です。任意の長さのバイナリ値を固定長のバイナリ値にマッピングできるアルゴリズムで、マッピングされた固定長のバイナリ値をハッシュ値と呼びます。優れたハッシュ アルゴリズムは、次の要件を満たす必要があります: ハッシュ値から元のデータを逆に推定できないこと、入力データの影響を非常に受けやすく、ビットが異なるとハッシュ値が大きく異なることになること、ハッシュの確率が高いこと競合は非常に小さい必要があります; ハッシュ アルゴリズムの計算プロセスは単純かつ効率的である必要があり、元のデータが非常に長い場合でも、ハッシュ値を迅速に取得できます; 2. ハッシュ アルゴリズムの使用シナリオ 2.1 安全な暗号化 詳細一般的なハッシュ暗号化アルゴリズムには MD5 (MD5 Message-Dige) が含まれます。

php が名前を取得できない場合はどうすればよいですか? php が名前を取得できない場合はどうすればよいですか? Nov 24, 2022 am 09:56 AM

form要素のnameとidの値が異なるとブラウザが認識できないため、PHPが名前を取得できない 解決策: 1. 一部のform要素やframe要素がnameを使用していないか確認する; 2. 取得できる要素のみを確認するID は割り当てられますが、名前は割り当てられません; 3. 複数選択ボックスのチェックボックスでは、「join(',', $__POST['name'])」を使用してデータを形成できます。

毎日使ってください! HASHって知っていますか? 毎日使ってください! HASHって知っていますか? Jul 26, 2023 pm 02:47 PM

ハッシュ法の主な考え方は、キー値に基づいてノードのストレージ アドレスを決定することです。キー値 K を独立変数として取り、特定の関数関係 h(K) (ハッシュ関数と呼ばれます) を通じて、ノードのストレージ アドレスを決定します。 、対応する関数値が来ます

Redisの基本データ型であるHashの一般的な操作例の分析 Redisの基本データ型であるHashの一般的な操作例の分析 May 31, 2023 am 10:43 AM

Redis データ型の共通操作 Hash Redis の Hash は、文字列型のフィールドと値のマッピング テーブルです。オブジェクトの保存に特に適しており、各ハッシュは 40 億を超えるキーと値のペアを保存できます。 Python に慣れている子供用の靴は、Python を辞書の辞書と考えることができます。以前のデータ型ストレージは k-v で、ハッシュ ストレージは k-dict で、dict には独自の k-v が設定されます。 1. hset はハッシュ テーブルのフィールドに値を割り当てますが、ハッシュ テーブルが存在しない場合は、新しいハッシュ テーブルを作成して hset 操作を実行します。フィールドがハッシュ テーブルにすでに存在する場合、古い値は上書きされます。 hsetmyhashk1v1 2、h

See all articles