Web サイトのアクセス権限

記事
IT・テクノロジー

Web サイトのアクセス権限

Web サイトなどを運営する場合、サイトのアクセス権限をきちんと設定することが重要です。例えば、サイトの情報を勝手に書き換えられてしまうのは問題ですよね?従って、サイトの書き込みや更新の権限はサイトの管理者に限定するというような処置が必要です。


サイトのアクセス権限に必要な事

まず最初に必要な事は、サイトのアクセス権限を設定するのに必要な事を考えます。

サイトの権限とは、「誰」が、「(サイトの)どの情報」に、「何ができるか」です。

従って権限の設定には、

* 誰
* どこ(どの情報)
* 権限(何ができるか)
を特定する必要があります。

「誰」とは、例えば、「管理者」とか「一般ユーザー」などです。 「どこ」とは、どの情報とか、どのページにアクセスできるかというアクセスの対象を示します。 「権限」は、アクセスの対象に対して何ができるかです。例えば、「読み込み」「書き込み」などです。 さらに細分化すれば、データの新規作成、更新、削除、読み込みなどと必要に応じていろいろな権限が考えられます。

どうやって「誰」を特定するか?

どうやって、アクセスしている人が「誰」かを特定するには、「ユーザー認証(ログイン)」を利用して、アクセスしている人を特定する場合が殆どです。ログインする事で、アクセスしようとしている利用者が誰かを判別する事が可能になります。

会員制のサイトの場合には、会員はログインすることで、会員限定の情報やページにアクセスできるようになるという仕組みです。ログインしていない場合は、会員でないとみなしてアクセスを制限するという形でアクセスの権限を管理する事ができます。

一般のサイトの場合は、管理者と一般利用者という分け方も可能です。管理者としてログインしている利用者のみが管理者としての権限を持っていて、それ以外の全てのアクセスは一般利用者として扱えばこうした権限の管理は可能です。Web サイトの作成で広く利用されている WordPress などはこの方法を利用しています。

このようにすることで、管理者以外の人が Web サイトの中身を勝手に変更したり、追加したりできないようにする事が可能になります。WordPress を利用しない Web サイトの場合でも、Web サイトをホスティングしているサーバーにログインしないと、サーバーにデータを転送できないようになっている場合が殆どなので、ホスティングサーバーに直接ログインして管理を行うようにすれば、アクセスの権限の管理はシンプルになります。

ページ毎やデータ毎の管理は面倒

サイト全体で、一般利用者は読み込み専門で、サイトの情報の追加、更新は管理者という場合はシンプルですが、ページ毎やデータ毎にアクセスの管理を行う場合は少し面倒になります。 アクセスする対象毎に、アクセスする人をチェックする必要があるので、通常はログインした際にクッキーなどを利用してセッションで管理するのが普通です。こうすることで、ページ毎にログインするなどという面倒な処理を省くことが可能になります。

アクセスの対象は、ページ(URL)や、アクセスするデータベースの情報によって管理するのが一般的です。ページ毎にアクセスの権限をチェックしたり、データベースにアクセスする際の権限の管理は、データベースの設定でも可能ですが、多くの実装では、データベースのアクセスをバックエンドのプログラムを介して行って、その際に設定する API 毎にアクセスの権限を設定するような方法で管理が可能です。

何をするか(権限)も、API で行う処理別に権限を設定する事が可能です。

一般的な話をすると、利用者の特定を行うためのログインの機能を実現するには、利用者(ユーザー)のログイン名やパスワードの管理は必須で、多くの場合データベースが必要です。このデータベースの情報を元に、ログインの処理などを行って、利用者を特定した上でアクセスの権限を設定します。

さらに、アクセスする場所(URL やデータベースのデータ)に応じた API などの仕組みが必要で、多くの場合はバックエンドのサービス(プログラム)が必要になります。シンプルなサイトの場合は、作成した HTML や CSS、Javascript のファイルをサーバーに送るだけで実装可能ですが、少し複雑サービスの場合には基本的にバックエンドのサービスは必須です。

Firebase を使うと簡単にできる

Firebase を利用すると、こうしたアクセス権限の設定も比較的簡単にできます。 多くの場合、バックエンドのサービスを作らなくても Firebase の基本機能で賄うことができるので、アプリやサービスの実装はかなりシンプルになります。Firebase 自体が、基本的な機能を事前に用意しているからです!

* Firebase がユーザー認証(ログイン)機能を提供
* Firebase がデータベース機能を提供
* Firebase がセッションの管理をしてくれる
* アクセスの権限は Firebase のセキュリティルールで設定可能
従って、あとは、必要なページの実装を行えば良いので最小限の開発で、本格的なサービスが短期間で確実に作成可能になります。

ユーザー認証の機能などは、最初から自分で作ると意外に複雑で面倒な実装です。 特に、利用者がログインを行った場合やログアウトなどをして、状態が変化する場合の処理は面倒です。Firebase ではこうしたログイン状態の変化に応じた処理を記述する仕組みが予め用意されているので、そうした心配をする事なく、Firebase の機能をフル活用すれば、ほとんどのアプリ、サービスは実現できます。

Firebase でアクセスの権限を設定する際に必要なことは、機能中心に設計するのではなく、Firebase のセキュリティールールの設定を意識した設計にする方が全体を上手くまとめる事ができます。データのコレクション毎の設定を行うのであれば、それほど難しくありませんが、コレクションの中のドキュメント単位でアクセスの権限を設定する必要がある場合には、最初からこうした権限の設定を意識したデータベースにしないとセキュリティルールの設定をするのが難しくなります。

良い例は、利用者のデータベースを作成する場合、利用者のプロフィールなどをデータベースに保存する場合があります。例えば、住所や電話番号などを一緒に保存する場合、そうした個人情報は他の利用者からはアクセスする事ができないようにするのが普通です。そうすると、セキュリティールールでアクセスする制限を行うためには、アクセスする情報がその利用者の物であるかを判別する必要があります。そうすると、データベースのエントリーにユーザーを特定するような ID などを含めておいて、その ID をチェックするようなルールを書く必要があります。Firebase のセキュリティールールの記述にはいろいろな制限があるので、予め「誰」が「どの情報」に何をできるのかがわかる仕組みを用意する必要があるという事です。

まとめ
Web サイトのアクセス権限をきちんと設定しないと、サイトの内容を改竄されたりなどの問題が置きます。サイトの提供するサービスや機能を考慮をして必要最低限の権限を各利用者や管理者毎に設定する必要があります。

権限を設定するには、利用者やアクセスする人が「誰」かを特定する必要があります。誰かが特定できなければ権限を設定することは難しくなります。従って、何らかのユーザー認証(ログイン)の機能などが必要になります。

シンプルなサイトの場合は、管理者と一般利用者との区別だけで良いので、ホスティングするサーバーへのアクセス権限だけでも十分ですが、ページ毎やデータベースのデータのアクセス権限を設定するには、複雑な仕組みが必要になります。

Firebase を利用すると、こうした必要な機能が予め用意されているので、最低限のプログラミングの開発でこうしたアクセスの権限の設定も可能になります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す