このチュートリアルは、PHPを使用して強力なログインシステムを構築するように導きます!プロセス全体を段階的にガイドし、ウェブサイト用の安全で効率的なログインシステムをすばやく作成できるようにします。
コアポイント:
PHPおよびログインシステム
PHPは、動的なWebページを作成できる人気のあるサーバー側のスクリプト言語です。 PHPの最も一般的な用途の1つは、Webサイトのログインシステムを作成することです。ログインシステムは、機密情報を保護し、ユーザーにパーソナライズされたコンテンツを提供するために不可欠です。このチュートリアルでは、PHPとMySQLを使用して、シンプルで強力なログインシステムを作成します。
次の手順について説明します
環境設定
開始する前に、次のソフトウェアがコンピューターにインストールされていることを確認してください。
Webサーバー(Apacheなど)
データベースとテーブルを作成
最初に、ユーザー情報を保存するためにデータベースとテーブルを作成する必要があります。
MySQL管理ツール(PHPMyAdminなど)を開き、login_systemという新しいデータベースを作成します。次に、構造を持つユーザーと呼ばれるテーブルを作成します。
このテーブルは、ユーザーのID、ユーザー名、電子メール、パスワード、およびアカウント作成日を保存します。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(255) NOT NULL, `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
次に、ユーザーがアカウントに登録できるようにする登録フォームを作成しましょう。 login_systemフォルダーにregister.phpという名前の新しいファイルを作成し、次のコードを追加します。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(255) NOT NULL, `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
このコードは、ユーザー名、電子メール、およびパスワードフィールドを備えた単純なHTMLフォームを作成します。フォームのアクションプロパティは登録するように設定されています。これは、フォームデータが処理のために同じファイルに送信されることを意味します。
さあ、PHPコードを追加してフォームデータを処理し、ユーザーテーブルに挿入しましょう。
register.phpファイルの先頭で、宣言の前に次のコードを追加します:
<form action="register.php" method="post"> <label for="username">用户名:</label> <input id="username" name="username" required type="text" /> <label for="email">邮箱:</label> <input id="email" name="email" required type="email" /> <label for="password">密码:</label> <input id="password" name="password" required type="password" /> <input name="register" type="submit" value="注册" /> </form>
ログインフォームをビルド
次に、ユーザーがアカウントにログインできるログインフォームを作成しましょう。 login_systemフォルダーにlogin.phpという名前の新しいファイルを作成し、次のコードを追加します。このコードは、ユーザー名とパスワードフィールドを備えた単純なHTMLフォームを作成します。フォームのアクションプロパティはlogin.phpに設定されています。これは、フォームデータが処理のために同じファイルに送信されることを意味します。
<?php if (isset($_POST['register'])) { // 连接数据库 $mysqli = new mysqli("localhost", "username", "password", "login_system"); // 检查错误 if ($mysqli->connect_error) { die("连接失败: " . $mysqli->connect_error); } // 准备并绑定SQL语句 $stmt = $mysqli->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $username, $email, $password); // 获取表单数据 $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; // 对密码进行哈希处理 $password = password_hash($password, PASSWORD_DEFAULT); // 执行SQL语句 if ($stmt->execute()) { echo "新账户创建成功!"; } else { echo "错误: " . $stmt->error; } // 关闭连接 $stmt->close(); $mysqli->close(); } ?>
さあ、PHPコードを追加してフォームデータを処理し、ユーザーを確認しましょう。 login.phpファイルの開始時に、宣言の前に次のコードを追加します:
このコードは、フォームが送信され、データベースに接続されているかどうかをチェックし、ユーザー情報をユーザーテーブルから取得します。パスワードは、PHPの組み込みPassword_verify関数を使用して検証されます。ログインが成功した場合、ユーザーはdashboard.phpページにリダイレクトされます。
<form action="login.php" method="post"> <label for="username">用户名:</label> <input id="username" name="username" required type="text" /> <label for="password">密码:</label> <input id="password" name="password" required type="password" /> <input name="login" type="submit" value="登录" /> </form>
ログインシステムを強化します
ログインシステムをさらに保護するには、次のベストプラクティスを実装する必要があります。
httpsを使用して、クライアントとサーバーの間に送信されたデータを暗号化します。トークンを使用して、CSRF(クロスサイトリクエスト偽造)保護を実装します。
おめでとうございます!強力なログインシステムを正常に作成し、ログインシステムを安全に強化しました。
FAQ(FAQ)SQLインジェクション攻撃からPHPログインシステムを保護する方法は?SQLインジェクションは、アプリケーションのデータベースレイヤーを悪用する一般的なセキュリティの脆弱性です。 PHPログインシステムをSQLインジェクション攻撃から保護するには、事前に処理されたステートメントとパラメーター化されたクエリを使用する必要があります。これらは、パラメーターに関係なく、データベースサーバーに送信および解析されるSQLステートメントです。これにより、攻撃者は悪意のあるSQLを注入できません。 PDOとMySqliの両方が、プレの前のステートメントをサポートしています。 パスワードハッシュは、ログインシステムの重要なセキュリティの側面です。 PHPは、パスワードのハッシュと検証用の組み込み関数を提供します。 password_hash()関数を使用してパスワードハッシュを作成し、password_verify()関数を使用して、パスワードがハッシュ値と一致するかどうかを確認できます。単純なテキストパスワードではなく、データベースにハッシュされたパスワードを常に保存してください。 PHPでCookieを使用して「Memember Me」関数を実装できます。ユーザーが「私を覚えておいて」オプションを選択してログインすると、有効期限が長くなるとクッキーを設定できます。次回ユーザーがウェブサイトにアクセスしたときに、このCookieが存在するかどうかを確認し、自動的にログインできます。ただし、潜在的なセキュリティリスクを防ぐために、Cookieを安全に処理することを忘れないでください。 パスワードリセット機能には、通常、パスワードリセットページを指す一意の1回限りのリンクを含む電子メールをユーザーに送信します。 PHPMailerは、PHPから電子メールを送信するための人気のライブラリです。リセットリンクを作成するときは、パスワードリセットリクエストの検証に使用できるトークンを含める必要があります。このトークンは安全に保管し、一定期間後に期限切れにする必要があります。 ユーザー入力検証は、データ形式のエラーとSQLインジェクション攻撃を防ぐために重要です。 PHPは、filter_var()などの入力検証に多くの関数を提供します。この関数のさまざまなオプションを使用して、さまざまな種類のデータを検証およびクリーニングできます。たとえば、filter_validate_emailを使用して、ユーザー入力が有効な電子メールアドレスであるかどうかを確認できます。 データベース内のユーザーテーブルに「役割」列を追加することにより、ユーザーロールを実装できます。各役割には異なる権限があり、特定のアクションを実行できるようにする前に、ユーザーの役割を確認できます。たとえば、「管理者」と「ユーザー」の役割があり、「管理者」ユーザーのみが他のユーザーを削除できるようにする場合があります。 2因子認証(2FA)は、ログインシステムにセキュリティの追加レイヤーを追加します。 SMSまたは電子メールを介してコードを送信したり、専用の2FAアプリケーションを使用したりするなど、2FAを実装するにはいくつかの方法があります。 PHPライブラリ(PHPGangsta/GoogleAuthenticatorなど)は、ログインシステムに2FAを実装するのに役立ちます。 ソーシャルログインにより、ユーザーはFacebookやGoogleなどのソーシャルメディアアカウントを使用してログインできます。これは、OAuthプロトコルを使用して実装できます。 PHPライブラリ(Hybridauthなど)は、ソーシャルログインを実装するプロセスを簡素化できます。 アカウントロックは、失敗したログイン試行の数を追跡することで実現できます。一定数の失敗した試行の後、アカウントをロックして、一定期間にわたってさらにログインの試行を防ぐことができます。これは、ブルートフォース攻撃を防ぐのに役立ちます。 ユーザー登録には、ユーザーがユーザー名、電子メール、パスワードなどの詳細を入力できるフォームを作成することが含まれます。ユーザーがフォームを送信したら、入力を確認し、パスワードをハッシュし、ユーザーの詳細をデータベースに保存できます。 PHPは、入力検証の場合はfilter_var()など、ユーザーの登録を支援する多くの機能を提供し、パスワードハッシュの場合はpassword_hash()を提供します。 PHPログインシステムにパスワードハッシュを実装する方法は?
私のPHPログインシステムに「私を覚えている」機能を実装する方法は?
PHPログインシステムにパスワードリセット機能を実装する方法は?
PHPログインシステムでユーザー入力を確認する方法は?
PHPログインシステムにユーザーの役割を実装する方法は?
PHPログインシステムに2要素認証を実装する方法は?
PHPログインシステムにソーシャルログインを実装する方法は?
PHPログインシステムにアカウントロックを実装する方法は?
PHPログインシステムにユーザー登録を実装する方法は?
以上が5つの簡単なステップでPHPを備えた強力なログインシステムを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。