会員サイト構築の記事

ARTICLE
会員サイト構築

ログイン機能とは?仕組みやPHPで実装する手順を解説

掲載日:2021年8月6日更新日:2024年2月21日

ログイン機能とは、Webサイトに入るために誰がログインするか特定するための機能です。今回はログイン機能とは何か、仕組みやセキュリティ性・実装する手順について解説していきます。ログイン機能を活用して安全な会員サイトを構築しましょう。

ログイン機能とは?

ログイン機能とは?

たとえばネットショップで買い物する際はスマホアプリを利用する際に、マイページに「ログイン」してさまざまな機能を利用します。何気なく使用している「ログイン機能」ですが、一体どのような仕組みで実行されているのでしょうか。ここではログイン機能とは何か、その仕組みについて詳しく解説していきます。

ログイン機能の仕組みについて

誰でも閲覧できるブログやWebサイトを利用する際には、ログインする必要はありません。しかしインターネットショッピングやSNSを利用する場合には「誰が利用するのか」を特定するためにログイン機能が搭載されています。

ログイン機能では、まずユーザーがログイン画面で「メールアドレスとパスワード」「ユーザー名とパスワード」「パスワードのみ」など、指定されたログイン情報を入力します。

するとWebサイトやアプリのプログラムがログイン情報を受取、データベースにあるリストからログイン情報に一致する情報を検索します。

一致する情報がなければログインエラーが表示され、一致する情報があればログインに成功し、ログイン画面の先のマイページなどに移動できます。

次回から自動でログインする機能の仕組みについて

ログイン画面のログイン情報を入力する項目の下に「次回から自動でログイン」と書かれたチェック欄があります。次回から自動でログインにチェックを入れると、一度ログインに成功すれば次回から自動でアクセスする機能です。

一度ログインしても、操作しない時間が続くとログイン情報は破棄され、自動的にログアウトしてしまいます。

そこで次回から自動でログインする機能では、ブラウザのデータを保存する機能「Cookie」を使います。具体的にはユーザーが「次回から自動でログイン」にチェックを入れると、ランダムなキー文字「トークン」がユーザーのcookieと利用するブラウザやアプリのユーザー情報の両方に保存されます。

するとユーザーが次回ログイン画面に訪れた際に、cookieに有効期限内のトークンがあればユーザーは自動でログインできるようになります。

ログイン機能のセキュリティ面は?

ログイン機能のセキュリティ面は?

普段さまざまなサイトで利用しているログイン機能ですが、セキュリティ面は安心できるのでしょうか?

ここではログイン機能に対し行われる4つの攻撃と、それぞれの対策方法について解説していきます。

不正ログイン

ログイン機能では第三者が不正ログインを試みる攻撃を受けることがあります。ID・パスワードでのログイン機能に対する攻撃には「総当たり攻撃」「逆総当たり攻撃」「辞書攻撃」の3種類があります。

総当たり攻撃(ブルートフォース攻撃)では、あるユーザーIDに対してさまざまなパスワードを入力しログインを試みます。

逆総当たり攻撃(リバースブルートフォース攻撃)は、総当たり攻撃とは逆に、あるパスワードに対してさまざまなユーザーIDを入力しログインを試みます。複数回ログインに失敗するとアカウントをロックするセキュリティ対策が一般的ですが、ユーザーIDを変更しながらログインを試みる逆総当たり攻撃ではアカウントロック設定を回避できる場合もあります。

辞書攻撃では、あるユーザーIDに対して「12345」や「abcde」など、ありがちなパスワード入力しログインを試みます。

これらの攻撃に共通する対策としてパスワードは「1234」「admin」など単純なもの・一般的なものではなく、英数字・大文字小文字・記号などを組み合わせた複雑なものを設定するようにしましょう。

クロスサイトスクリプティング(XSS)

クロスサイトスクリプティングでは、まず攻撃者は脆弱性のあるWebサイトを見つけます。そしてそのWebサイトを利用しているユーザーが閲覧しそうな掲示板などに、文字列の記載のみで実行できるプログラム「スクリプト」を埋め込んだURLを投稿し罠を仕掛けます。

ユーザーが思惑通りに掲示板にアクセスしスクリプトを埋め込んだURLをクリックすると、悪意のあるスクリプトが実行されてしまいます。URLをクリックするとWebサイトそっくりな偽サイトに移動し、ユーザーは疑うことなく個人情報などを入力してしまうのです。

クロスサイトスクリプティングの被害にあってしまうと。悪意ある攻撃者へ個人情報が漏れる恐れや、大事な情報が保存されたcookieの情報が奪われてしまいます。

クロスサイトスクリプティングの被害を防ぐためにも、不審なURLをクリックしないようにしましょう。

SQLインジェクション

SQLインジェクションとは、Webサイトのデータベースに対する攻撃のことです。

Webサイト内にキーワード検索できるフォームを設置しているサイトは多いですが、攻撃者が検索用フォームに不正な内容を入れたデータベース言語を入力し検索を行います。

すると不正な内容を入れたデータベース言語の内容が実行されてしまい、ユーザーの個人情報などの大切なデータが攻撃者に奪われたり、Webサイトの内容が改ざんされる恐れがあります。

SQLインジェクションを防ぐためには、不正なデータベース言語の入力を無効にするために、入力されたデータベース言語を別も文字に書き換える「エスケープ処理」を施すことが大切です。

ほかにも攻撃からWebサイトを守るファイアーウォールを導入したり、定期的にサイトの脆弱性をチェックするサービスを利用したりすることが大切です。

クロスサイト・リクエスト・フォージェリ(CSRF)

クロスサイト・リクエスト・フォージェリでは、悪意のある攻撃者が攻撃用のWebサイトを準備し、一般ユーザーがそのサイトにアクセスするように誘導します。

ユーザーが思惑通りに攻撃用のWebサイトを訪問すると、攻撃者が準備していた不正リクエストが攻撃対象となるサーバーに送信されます。

こうすることで攻撃者は一般ユーザーを利用し、掲示板に不正な書き込みを大量に行ったり、他のユーザーを不正サイトに誘導できます。

クロスサイト・リクエスト・フォージェリを予防するには攻撃用のWebサイトにアクセスしないことが一番なので、不審なURLをクリックしないことが対策となります。

またセキュリティ対策ソフトなどを利用し、攻撃用のWebサイトをブロックしましょう。

合わせて読みたい記事「PHPを使ったログイン機能は安全?セキュリティ観点での詳細を解説

PHPでログイン機能実装する手順について

PHPでログイン機能実装する手順について

PHPとは、動的なWebページを作れるスクリプト言語のことです。

ここではPHPを使ってWebサイトにログイン機能を実装する手順の一例を解説していきます。難しいイメージがあるかもしれませんが、手順をひとつひとつ確認してやっていきましょう。

※本記事でご紹介するコードの内容は一例ですので、フォームの項目やHTMLの記述、MySQLでのデータベース名やID・パスワード等はご自身が使用したい情報に書き換えや調整した上でご使用ください。
※あくまで参考であり動作を保証するものでは有りません。

HTMLを使ってページを作る

PHPでログイン機能を実装するためには、まずHTMLでログイン画面のページを作成します。以下のコードを参考にHTMLでログインフォームを作成しましょう。

<div class="signin">
    <form action="" method="POST">
        <label for="signin-id">アカウント名</label>
        <input id="signin-id" name="username" type="text" placeholder="メールアドレスを入力">
        <label for="signin-pass">パスワード</label>
        <input id="signin-pass" name="password" type="text" placeholder="パスワードを入力">
        <button name="signin" type="submit">ログインする</button>
    </form>
</div>

上記のコードの内容は、メールアドレスとパスワードを入力して「ログインする」ボタンを押すと、ログイン情報を送信するものです。

MySQLでデータベースを作る

次にMySQLでデータベースのデータを作ります。
ログイン認証するために必要なデータベースを作るために、以下のコードをコマンドラインに打ち込みましょう。

//mysql にログイン
>mysql -u root -p

//データベースを作成
>create database データベース名;

//データベースを使用中にする
>ues データベース名;

//作成したデータベースに使用者権限を付ける
>grant all on データベース名.* to admin@localhost identified by 'パスワード';

//権限付与したユーザーでMySQLに再ログイン
>mysql -u 作成したユーザー -p
password:直前で設定したパスワードを入力

//データベースを使用中にする
>ues データベース名;

//作成したデータベースにテーブルを作る
>create table users (
id int not null auto_increment primary key,
username varchar(100) not null,
password varchar(255) not null);

//実際にテーブルが上記の内容で作成されているか確認
>desc データベース名;

次はユーザー情報を入力していきます。

コマンドを使ってユーザー情報を入力する

次に以下のコマンドを打ち込みます。

insert into users values (1, 'sampleuser', 'samplepass');

これでログインする際に認証する対象となる情報をデータベースに追加できます。

PHPでログイン認証の処理を作る

下準備が完了したので、PHPでログイン機能を作っていきましょう。

以下のコードを入力してください。

//①エラーメッセージの初期状態を空に
$err_msg = "";

//②サブミットボタンが押されたときの処理
if (isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];

//③データが渡ってきた場合の処理
try {
$db = new PDO('mysql:host=localhost; dbname=データベース名','ユーザー名','パスワード');
$sql = 'select count(*) from users(認証するテーブル名) where username=? and password=?';
$stmt = $db->prepare($sql);
$stmt->execute(array($username,$password));
$result = $stmt->fetch();
$stmt = null;
$db = null;

//④ログイン認証ができたときの処理
if ($result[0] != 0){
header('Location: http://localhost/home.php');
exit;

//⑤アカウント情報が間違っていたときの処理
}else{
$err_msg = "アカウント情報が間違っています。";
}

//⑥データが渡って来なかったときの処理
}catch (PDOExeption $e) {
echo $e->getMessage();
exit;
}
}

これでPHPの入力は完了です。

圧倒的な柔軟性とセキュリティで思い通りの会員向けサイト・サービスを構築するなら

当社のご提供する 「会員管理・会員サイト構築ソリューション」は、会員向けのサイトやサービスに必要とな要素をワンストップで提供するシステムです。

会員データ管理からマイページ作成・ログインなどの基本機能から、メール配信やアンケート作成、問い合わせ、フォーム作成、決済連携まで、会員管理・運営に必要な機能が充実。また、金融機関・官公庁でも採用されている高いセキュリティで会員の大切なデータを管理します。WordPressやMovableTypeを始めとした各種CMSや基幹システム等とのAPI連携も可能です。

ファンクラブやユーザーサポートサイト、学会・協会サイト、申請受付サイト、キャンペーン受付サイト、イベント受付管理、入居者サイトなど様々な業界・用途・シーンで延べ11,000以上のご利用実績がございます。

サービスの詳細については「会員管理・会員サイト構築ソリューション」のページをご覧いただくか、サービス導入をご検討中の方はこちらからぜひお問い合わせください。

まとめ

今回ログイン機能の仕組みやセキュリティ面について詳しく解説してきました。ログイン機能はWebサイトの安全性を高めてくれる機能ですが、脆弱性もいくつか確認されています。ログイン機能の脆弱性とその対策をしっかりと知り、よりユーザーが安心して利用できるようなWebサイトを作成してください。