会員サイト構築の記事
ARTICLEログイン機能とは?仕組みやPHPで実装する手順を解説
ログイン機能とは、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とは、動的な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の入力は完了です。
ログイン機能のセキュリティ対策
悪意を持った第三者によるWebサイトへの攻撃は日々進化しており、ログイン機能を実装する場合には、サイト運営者として十分なセキュリティ対策を行う必要があります。ここでは、ユーザーが安心してサイトを使用できるよう、ログイン機能のセキュリティ対策として有効な方法を3つご紹介します。
2要素認証の活用
2要素認証は2段階認証とも呼ばれ、パスワードのほかに「認証コード」を利用して本人確認を行うことで、より安全にユーザーを識別する方法です。登録した電話番号あてにSMSで認証コードを送る方法や、電話の音声で認証コードを伝える方法などが一般的で、パスワードだけを使用してログインするよりも強固なセキュリティが期待できます。2要素認証に対応したWordPressのプラグインも提供されていますので、活用することをおすすめします。
パスワードの暗号化、定期的な変更
ユーザーの設定したパスワードをそのまま保存しておくと、悪意を持った攻撃者によって割り出されてしまうリスクがあるため、サイト運営者として安全な運営を行ううえで高度な暗号化が必要です。ユーザーごとに任意文字列を与えてハッシュ化を行う「SALT」処理や、ハッシュ値の計算を何万回も繰り返す「ストレッチング処理」により、セキュリティを高める必要があるでしょう。
また、ユーザーが長期間にわたり同じパスワードを使用していると、パスワードを特定されるリスクが高くなるため、定期的なパスワード変更をユーザーに通知することでユーザーの安心感につながります。
WordPress本体・テーマ・プラグインのこまめなアップデート
WordPress本体・テーマ・プラグインをこまめにアップデートし、常に最新バージョンを使用することもセキュリティ対策には欠かせません。WordPress・テーマ・プラグインの開発元は、自社製品に脆弱性が発見されると、第三者による攻撃を未然に防ぐための最新プログラムを公表しています。アップデートに手間が掛かるため後回しにしてしまう・アップデートを忘れてしまうという方は、自動アップデートの設定を活用しましょう。
ログイン機能に関してよくある質問
ここからは、ログイン機能に関してよくある質問として、「ログイン機能の重要性」「不正ログインの主な原因」の2点についてご紹介していきます。
ログイン機能はなぜ重要?
ログイン機能があることで、過去にチェックした商品や閲覧した動画など、自分だけの閲覧履歴が確認でき、Webサービスをより快適に利用可能です。一方で、閲覧履歴を始めとする個人情報をなりすましや不正ログインなどの攻撃から保護する必要がありますが、ここでもログイン機能が役立っています。
不正ログインの主な原因は?
不正ログインの主な原因は、IDやパスワードの流出による不正利用です。ログイン情報を入手した第三者が本人になりすまして不正ログインを行うリスクがあるため、IDとパスワードの管理は慎重に行う必要があります。パスワードの文字列の組み合わせを複雑にする、こまめにパスワード変更を行うことは、不正ログインへの対策として有効といえます。
圧倒的な柔軟性とセキュリティで思い通りの会員向けサイト・サービスを構築するなら
当社のご提供する 「会員管理・会員サイト構築ソリューション」は、会員向けのサイトやサービスに必要とな要素をワンストップで提供するシステムです。
会員データ管理からマイページ作成・ログインなどの基本機能から、メール配信やアンケート作成、問い合わせ、フォーム作成、決済連携まで、会員管理・運営に必要な機能が充実。また、金融機関・官公庁でも採用されている高いセキュリティで会員の大切なデータを管理します。WordPressやMovableTypeを始めとした各種CMSや基幹システム等とのAPI連携も可能です。
ファンクラブやユーザーサポートサイト、学会・協会サイト、申請受付サイト、キャンペーン受付サイト、イベント受付管理、入居者サイトなど様々な業界・用途・シーンで延べ11,000以上のご利用実績がございます。
サービスの詳細については「会員管理・会員サイト構築ソリューション」のページをご覧いただくか、サービス導入をご検討中の方はこちらからぜひお問い合わせください。
まとめ
今回ログイン機能の仕組みやセキュリティ面について詳しく解説してきました。ログイン機能はWebサイトの安全性を高めてくれる機能ですが、脆弱性もいくつか確認されています。ログイン機能の脆弱性とその対策をしっかりと知り、よりユーザーが安心して利用できるようなWebサイトを作成してください。