ユーザー認証システムのセキュリティは、ウェブサイトやアプリケーションを構築する際に重要な考慮事項です。 PHPは、パスワードの暗号化と検証を実装するさまざまな方法を提供します。その中には、Crypt()関数はクラシックで強力な暗号化ツールです。この記事では、Crypt()関数を使用して、パスワード暗号化、検証、ユーザーデータ処理など、安全なユーザー登録とログインシステムを構築する方法について説明します。
crypt()は、一方向ハッシュアルゴリズムを使用して文字列を暗号化するPHPによって提供される暗号化関数です。塩(塩)形式に応じて、さまざまな暗号化アルゴリズム(MD5、SHA-256、SHA-512、ブローフィッシュなど)をサポートします。
string crypt ( string $str , string $salt )
塩の値は、暗号化アルゴリズムのタイプと動作を決定します。セキュリティのために、SHA-512またはブローフィッシュをサポートする塩を使用することをお勧めします。
ユーザーを登録するときは、データベースにデポジットする前にパスワードを暗号化する必要があります。データベースが漏れている場合でも、攻撃者がパスワードを簡単に復元できないことを確認します。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// 強力な塩を作成し、パスワードを暗号化します(使用SHA-512)
$salt = '$6$' . bin2hex(random_bytes(16)) . '$'; // SHA-512
$hashed_password = crypt($password, $salt);
// ユーザー名と暗号化されたパスワードをデータベースに保存します(によるSQLite例として)
$db = new PDO('sqlite:users.db');
$stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$username, $hashed_password]);
echo "正常に登録されています,お願いします <a href='https://m66.net/login.php'>ログイン</a>。";
}
?>
HTML登録フォーム:
<form method="POST" action="">
ユーザー名:<input type="text" name="username" required><br>
パスワード:<input type="password" name="password" required><br>
<input type="submit" value="登録する">
</form>
ログインするときは、元のパスワードを知る必要はありません。データベース内の同じ塩を使用してユーザーが入力したパスワードを暗号化し、保存されたハッシュと比較するだけです。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password_input = $_POST['password'];
$db = new PDO('sqlite:users.db');
$stmt = $db->prepare("SELECT password FROM users WHERE username = ?");
$stmt->execute([$username]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
$hashed_password = $row['password'];
if (crypt($password_input, $hashed_password) === $hashed_password) {
echo "ログイン成功!おかえり,{$username}。";
} else {
echo "パスワード错误。";
}
} else {
echo "ユーザーは存在しません。";
}
}
?>
HTMLログインフォーム:
<form method="POST" action="">
ユーザー名:<input type="text" name="username" required><br>
パスワード:<input type="password" name="password" required><br>
<input type="submit" value="ログイン">
</form>
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
HTTPSの使用:暗号化された接続を介してすべてのフォーム転送が実行されることを確認してください。
CSRF保護を追加:クロスサイトリクエストの偽造攻撃を防ぎます。
ログインの試行回数を制限する:ブルートフォースの亀裂を防ぎます。
PHPバージョンを時間内に更新する:暗号化アルゴリズムと機能を安全に保ちます。
より最新の関数(Password_Hashなど)を使用する場合、この記事のロジックを参照できます。Crypt ()は有効ですが、最新のPHPはPassword_hash()とpassword_verify()を使用することをお勧めします。
Crypt()関数とそれに付随するパスワード検証ロジックを合理的に使用することにより、比較的安全なユーザー認証システムを構築できます。最新のPHPは、 password_hash()のようなより高度なインターフェイスを提供しますが、 crypt()がどのように機能するかを理解することで、パスワード暗号化の性質を深く理解するのに役立ちます。 Crypt()は、 PHP環境または特別な互換性要件のいくつかの低いバージョンでは、依然として実用的な選択です。