Webサービスを公開する場合の注意点!
Silicon Valley Super Ware
2020年5月17日
Webサービスを公開する場合の注意点!
先週は、「Vue.js」での実装にポイントをおいて、お問合せフォームの実装について 説明してきました。実際に初めて「Vue.js」の開発環境を使う人には大変だったと思いますが、 如何でしょうか?連載の主体が、Webサービスを作る事に置いているので、 Vue.jsに関しては、時々ポイントを取り上げて行くという形で今後も対応していきます。
今日はサービスを公開する前の注意点について書いていきます。
その中でも重要なのが「セキュリティ」です。
今日のメインのテーマは、「Firebase」のセキュリティです。Firebaseのセキュリティ
Firebaseのセキュリティの基本は、誰が「読み込み」や「書き込み」が できるかという設定です。さらに詳しく分けるとFirebaseのデータベースでは大きく分けて以下の設定ができます
- データエントリー(Firebaseのドキュメント)の新規作成
- データエントリーの情報の更新
- データエントリーの情報の削除
- データエントリーの読み込み
セキュリティールールで設定する事が重要!
先週の話を見ると、お問合せのデータのアクセスにはログインが必要で、 ログインしてから表示すれば問題がないのでは?と思うかもしれません。実はそれでは不十分です。
理由は、JavaScriptのコードはブラウザーから見る事が出来るからです!
つまり、データベースへのアクセスの仕方を知っていれば、コードを見ると セキュリティールールできちんと設定がされていないと、誰でもデータを 見る事が出来る事になります。Firebaseのデータベースの設定を最初に行うときに実は聞かれているのですが、 最初のルール設定には2つの選択肢があります。
テストモードを選ぶと一定期間(30日間)は誰でもアクセスできるルールが設定されます。
プロダクションモードの場合、細かいルール設定をしないとアクセスが出来ない 設定になります。テスト時は、インターネット上に公開しないで自分のPCのみでアクセスする 場合が殆どなので、通常は他人にプロジェクトの存在は知られていません。 なので、「誰でもアクセスできる」設定にしても大きな問題にならないのが 普通です。
公開すると、そのプロジェクト(データベース)の存在は公になります。
つまり、悪意の人にもアクセスができるようになってしまうので、 セキュリティルールをきちんと設定した上で公開する必要があります。どんな設定が必要か?
まずは、お問合せを送る部分では、一般ユーザー(基本的に誰でも) お問合せをすると考えると、「ドキュメントの新規作成」は 全ての人に開放する必要があります。サービスの性格を考えると、それ以外のアクセスは許可しないというのが 一般的な考えかたです。
更新するためには読み出しが必要ですが、ユーザー登録なしで お問合せをする場合お問合せ者の特定はできません。 従って、全てのメッセージの読み込みの許可をする必要が出てくるので、 更新は許可しないという事になります。 削除も同様で勝手に削除されては困るので、一般ユーザーは禁止です。
管理者は、読み込み、削除の権限は必要です。
実際は、管理者が問い合わせたり、書き込みを更新する必要はありません。 しかし、セキュリティルール上は、全ての権限を与えてしまうのが普通です。実際のルールは?
一般ユーザーに与える新規作成の権利はメッセージのコレクションのみ!必要以上の権限を与えないのが重要なので、必要なメッセージを格納する コレクションのみ新規作成の権限があれば良い事になります。
一方で管理者は全ての読み書きを出来るようにする必要があります。 管理者を特定するには、管理者がログインした際のUIDを使って 管理者かどうかをチェックすれば実現できます。
これがルールの例です。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid == "xxxxxxxxxxxx"; }
match /message/{message_id} {
allow create; }
}
}
こうしておけば、データベースへのアクセスのやり方がばれたとしても、
管理者として、Firebaseにログインができなければ、新規作成以外のアクセスが出来なくなります。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid == "xxxxxxxxxxxx"; }
match /message/{message_id} {
allow create; }
}
}
シリコンバレースーパーウエアでは、シンプルなWebサービスの作り方だけではなく、 より複雑なWebサービスをテーマにした講座も同時に提供しています。 さらに、作ったWebサービスを利用したビジネスの展開まで考えたWebサービスの 作り方がわかるようになります。
興味のある方は今すぐお問合せください!
またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。
コメント
コメントを投稿