SQLインジェクションを回避することは、安全なユーザー登録システムを構築する際の最優先事項の1つです。作成されたステートメントを使用してmysqli :: stmt_init関数を使用することは非常に効果的な方法です。この記事では、完全な例を使用して、 mysqli :: stmt_initを使用して安全なユーザー登録プロセスを実装する方法を段階的に説明します。
まず、PHP環境にMySQLI拡張機能が有効になり、ユーザーレジストリがあることを確認してください。たとえば、次のようにしてください。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
MySQLI拡張機能を使用して、データベース接続を確立します。
$mysqli = new mysqli("localhost", "db_user", "db_pass", "my_database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
ユーザーを安全に登録するための完全なプロセスは次のとおりです。
// これらがフォームから取られた値であると仮定します,基本的な検証とフィルタリングを実行することを忘れないでください
$username = trim($_POST['username']);
$password = $_POST['password'];
$email = trim($_POST['email']);
// パスワード暗号化(使用 password_hash 安全性を向上させます)
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
// 初期化 statement 物体
$stmt = $mysqli->stmt_init();
// 準備する SQL 声明
if ($stmt->prepare("INSERT INTO users (username, password_hash, email) VALUES (?, ?, ?)")) {
// バインドパラメーター(s 急行 string タイプ)
$stmt->bind_param("sss", $username, $passwordHash, $email);
// 执行声明
if ($stmt->execute()) {
echo "正常に登録されています!私たちのホームページへようこそ:<a href='https://m66.net'>m66.net</a>";
} else {
echo "登録に失敗しました:" . htmlspecialchars($stmt->error);
}
// 閉鎖 statement
$stmt->close();
} else {
echo "準備する声明失败:" . htmlspecialchars($mysqli->error);
}
// 閉鎖数据库连接
$mysqli->close();
$ mysqli-> prepare()を直接使用することもできますが、 mysqli :: stmt_initは、特にプロパティの設定やデバッグなどの複雑なシナリオのステートメントオブジェクトのさらなる操作に適しています。 mysqli_stmtオブジェクトを個別に初期化し、 prepare()を使用してSQLステートメントをバインドできます。
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare($sql)) {
// これはなしで行うことができます SQL 構文エラーを確認するか、の前提の下で他の設定を作成します
}
入力検証とクリーニング:違法なキャラクターやスクリプトの注入を防ぎます。
パスワードセキュリティ:パスワードを明示的に保存しないでください。Password_hashとpassword_verifyを使用してください。
エラー処理:データベースエラーをユーザーに直接公開しないでください。
HTTPS転送:登録フォームがHTTPSを介して送信され、輸送中のデータを保護することを確認してください。
MySQLI :: STMT_INITおよび前処理ステートメントを使用することは、安全なユーザー登録システムを構築するための重要なステップです。アプリケーションの複雑さが増加するにつれて、メールボックスの検証やマルチファクター認証などのセキュリティメカニズムを追加して、全体的なセキュリティを改善できます。コードのすべての行を安全と見なす必要があることを忘れないでください!
ユーザーのログイン検証プロセスを引き続き理解したいですか?