PHP でパスワードを処理するいくつかの方法
PHP を使用して Web アプリケーションを開発する場合、多くのアプリケーションではユーザーの登録が必要になります。登録時に、ユーザーの情報を処理する必要があります。最も一般的なのは電子メールとパスワードです。この記事は、パスワードの処理、つまりパスワードの暗号化について説明することを目的としています。
MD5
多くの PHP 開発者が初めて PHP に触れたとき、パスワードを処理するために好まれる暗号化関数は MD5 ではないかと思います。当時私は次のように考えていました。
$password = md5($_POST["パスワード"]);
上記のコードはよく知られていますか? しかし、MD5 暗号化方式は、その暗号化アルゴリズムが実際には少し単純であり、多くのパスワード クラッキング サイトに大量のパスワード文字列が保存されているため、現在 PHP の世界ではあまり普及していないようです。 MD5 によって暗号化されるため、ここではユーザー パスワードの暗号化に MD5 のみを使用することを強くお勧めしません。
SHA256とSHA512
実は以前のMD5と同時にSHA1暗号化方式も存在しますが、アルゴリズムは比較的単純なのでここでは簡単に触れておきます。ここで説明する SHA256 と SHA512 はどちらも SHA2 ファミリの暗号化関数であり、名前を見れば推測できるかもしれませんが、これら 2 つの暗号化方式はそれぞれ 256 ビット長と 512 ビット長のハッシュ文字列を生成します。
使用方法は次のとおりです:
$password = hash("sha256", $password);
PHP には hash() 関数が組み込まれています。 hash() 関数に暗号化メソッドを渡すだけです。 sha256、sha512、md5、sha1 などの暗号化方式を直接指定できます。
塩分値
暗号化プロセスには、非常に一般的な小さなパートナーであるソルト値もあります。はい、暗号化するときは、一定レベルのセキュリティを達成するために、暗号化された文字列に実際に追加の文字列を追加します。
関数generateHashWithSalt($password) {
$intermediateSalt = md5(uniqid(rand(), true));
$salt = substr($intermediateSalt, 0, 6);
ハッシュを返す("sha256", $password . $salt);
}
Bcrypt
暗号化方式を提案するとしたら、後で説明する Hashing API を強く推奨するため、Bcrypt が最低要件になるかもしれませんが、Bcrypt も比較的優れた暗号化方式です。
関数generateHash($password) {
if (define("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
$salt = '$2y$11$' .substr(md5(uniqid(rand(), true)), 0, 22);
return crypt($password, $salt);
}
}
Bcrypt は実際には Blowfish 関数と crypt() 関数を組み合わせたものです。ここでは CRYPT_BLOWFISH を使用して Blowfish が利用可能かどうかを判断し、上記のようにソルト値を生成します。ただし、ここで注意しなければならないのは、crypt() のソルト値です。 $2a$ または $2y$ から始まり、詳細については以下のリンクを参照してください:
http://www.php.net/security/crypt_blowfish.php
詳しい情報はこちらからご覧ください:
http://php.net/manual/ja/function.crypt.php
パスワードハッシュAPI
これが私たちのハイライトです。PHP 5.5 以降でのみ利用できる新機能です。これは主に次の機能を提供します。
password_hash() – パスワードを暗号化します。Password_verify() – 暗号化されたパスワードを検証し、ハッシュ文字列が一貫しているかどうかを確認します。
password_needs_rehash() – パスワードを再暗号化します。
password_get_info() – 暗号化アルゴリズムの名前といくつかの関連情報を返します。
crypt() 関数を使用するのに十分ですが、password_hash() はコードを短くするだけでなく、セキュリティ保護も強化します。そのため、PHP 関係者は現在この方法を推奨しています ユーザーのパスワードを暗号化するために、Laravel などの多くの人気のあるフレームワークが使用されています。この暗号化方式を使用してください。
$hash = パスワード_ハッシュ($password, PASSWORD_DEFAULT);
はい、たった 1 行のコードで、すべて完了です。
PASSWORD_DEFAULT は現在 Bcrypt を使用しているため、上記でこれをお勧めします。ただし、Password Hashing API の方が優れた機能を備えているため、厳粛に Password Hashing API を推奨します。ここで注意する必要があるのは、コードで PASSWORD_DEFAULT 暗号化方式を使用する場合、データベース テーブルでパスワード フィールドの長さを 60 文字以上に設定する必要があるということです。この場合、暗号化された文字列 PASSWORD_BCRYPT も使用できます。長さは常に 60 文字になります。
ここでpassword_hash()を使用する場合、ソルト値(salt)と消費値(コスト)を指定する必要はありません。後者はコストが大きいほど暗号化が複雑になると理解できます。アルゴリズムとメモリ消費量が大きくなります。もちろん、対応する塩分値と消費量値を指定する必要がある場合は、次のように記述できます:
$options = [
'salt' =>custom_function_for_salt(), //適切なソルトを生成する独自のコードを作成します
'cost' => 12 // デフォルトのコストは10です
];
$hash =password_hash($password, PASSWORD_DEFAULT, $options);
パスワードが暗号化された後、ユーザーが入力したパスワードが正しいかどうかを判断するためにパスワードを検証する必要があります:
if (password_verify($password, $hash)) {
// パス
}
その他 {
// 無効です
}
とても簡単で、password_verifyを直接使って、前に暗号化した(データベースに保存されている)文字列を検証するだけです。
しかし、時々暗号化方法を変更する必要がある場合、例えば、ある日突然ソルト値を変更したり、消費値を増やしたい場合は、この時点でpassword_needs_rehash()関数を使用します。
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {// コストを12に変更
$hash =password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// 新しいハッシュを保存することを忘れないでください!
}
この方法でのみ、PHP のパスワード ハッシュ API は暗号化方法が再度変更されたことを認識します。これの主な目的は、その後のパスワード検証です。
password_get_info()について簡単に説明すると、この関数は一般に次の3つの情報を確認できます。
algo – アルゴリズムの例
algoName – アルゴリズム名
options – 暗号化時のオプションのパラメータ
それでは、今すぐ PHP 5.5 を使い始めて、それ以前のバージョンについてはもう心配しないでください。
http://www.bkjia.com/PHPjc/1041132.html

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
