データ暗号化は、特にインターネット上で発生する多数のトランザクションと送信される大量のデータを考慮すると、私たちの生活の中でますます重要になっています。セキュリティ対策に興味がある場合は、PHP が提供する一連のセキュリティ機能についても理解する必要があります。この記事では、アプリケーション ソフトウェアにセキュリティ機能を追加できるように、これらの機能の紹介と基本的な使用方法を説明します。
予備知識
PHP のセキュリティ機能を詳しく紹介する前に、暗号化についてまだ詳しくない読者に、暗号化に関する基本的な知識を説明するために少し時間を割く必要があります。暗号化の基本概念をすでによく理解している場合は、読み飛ばしていただいても構いません。この部分。 。
暗号動物学は、大まかに言うと、暗号化と復号化の研究と実験です。暗号化は、わかりやすいデータを理解できないデータに変換するプロセスであり、復号化は、理解できないデータを元のわかりやすいデータに変換するプロセスです。理解しにくい情報を暗号、理解しやすい情報を平文と呼びます。
データの暗号化/復号化には特定のアルゴリズムが必要です。これらのアルゴリズムは、有名なシーザー コードなど、非常に単純なものもありますが、現在の暗号化アルゴリズムは比較的複雑で、既存の方法では解読できないものもあります。
PHP暗号化機能
Windows 以外のプラットフォームの使用経験が少しある人は、crypt() に精通しているかもしれません。この関数は、一部のプレーン コードを暗号化できますが、パスワードを元のプレーン コードに変換することはできません。これは一見役に立たない機能のように見えるかもしれませんが、システム パスワードの整合性を確保するために広く使用されています。一方向暗号化されたパスワードは、第三者の手に渡ると平文に戻すことができないため、ほとんど役に立ちません。ユーザーが入力したパスワードを検証するときも、ユーザーの入力は一方向アルゴリズムを使用します。入力が保存されている暗号化されたパスワードと一致する場合、入力されたパスワードは正しい必要があります。
PHP は、crypt() 関数を使用して一方向の暗号化を完了する機能も提供します。ここで機能を簡単に紹介します:
string crypt (string input_string [, string Salt])
input_string パラメータは暗号化する必要がある文字列で、2 番目のオプションのソルトは暗号化されたパスワードに影響を与える可能性のあるビット文字列で、いわゆる事前計算攻撃の可能性をさらに排除します。デフォルトでは、PHP は 2 文字の DES 干渉文字列を使用します。システムで MD5 (MD5 アルゴリズムについては後で紹介します) を使用する場合は、12 文字の干渉文字列が使用されます。ちなみに、次のコマンドを実行すると、システムが使用する干渉文字列の長さを確認できます:
print "私のシステムソルトサイズは: CRYPT_SALT_LENGTH;
システムは他の暗号化アルゴリズムもサポートする場合があります。 crypt() は 4 つのアルゴリズムをサポートします。サポートするアルゴリズムと対応する Salt パラメーターの長さは次のとおりです。
アルゴリズムソルトの長さ
CRYPT_STD_DES 2 文字 (デフォルト)
CRYPT_EXT_DES 9 文字
CRYPT_MD5 $
で始まる12文字
CRYPT_BLOWFISH $
で始まる 16 文字
crypt() を使用してユーザー認証を実装します
crypt() 関数の例として、正しいユーザー名とパスワードを提供できるユーザーのみにディレクトリへのアクセスを制限する PHP スクリプトを作成する状況を考えてみましょう。私のお気に入りのデータベースである MySQL のテーブルにデータを保存します。 members という名前のテーブルを作成することから例を始めましょう:
mysql>CREATE TABLE メンバー (
->ユーザー名 CHAR(14) NOT NULL,
->パスワード CHAR(32) NOT NULL,
->主キー(ユーザー名)
->);
次に、次のデータがすでにテーブルに格納されていると仮定します。
ユーザー名 パスワード
クラーク・ケロD1C377lKE
ブルース ba1T7vnz9AWgk
ピーター・パルvRWsRLZ4U
これらの暗号化されたパスワードに対応する平文コードは、それぞれ kent、banner、parker です。各パスワードの最初の 2 文字に注意してください。これは、次のコードを使用してパスワードの最初の 2 文字に基づいて干渉文字列を作成したためです。
$enteredPassword.
$salt = substr($enteredPassword, 0, 2);
$userPswd = crypt($enteredPassword, $salt);
// $userPswd はユーザー名と一緒に MySQL に保存されます
Apache のパスワード応答認証構成を使用して、ユーザーにユーザー名とパスワードの入力を求めます。PHP についてはあまり知られていませんが、Apache パスワード応答システムによって入力されたユーザー名とパスワードが $PHP_AUTH_USER および $PHP_AUTH_PW I として認識されるということです。は、認証スクリプトでこれら 2 つの変数を使用します。以下のコードをよりよく理解するために、時間をかけて以下のスクリプトを注意深く読み、説明にもっと注意を払ってください:
crypt() と Apache のパスワード応答検証システムの応用
$host = "ローカルホスト";
$user = "ゾロ";
$pswd = "地獄のオドリー";
$db = "ユーザー";
// 認証を False に設定します
$authorization = 0;
// ユーザーがユーザー名とパスワードを入力したことを確認します
if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)) :
mysql_pconnect($host, $user, $pswd) または die("MySQL に接続できません
サーバー!");