質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Security+

Security+は、IT業界団体であるCompTIA認定の資格の一つです。ネットワークセキュリティやコンプライアンスと運用セキュリティといったセキュリティ分野における知識・技術の証明になり、セキュリティインシデントに対応するための知識も評価されます。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

11814閲覧

firebaseの認証で扱うユーザーのuidを公開の状態にしてもセキュリティ的に問題ないか。

kaggle

総合スコア17

Security+

Security+は、IT業界団体であるCompTIA認定の資格の一つです。ネットワークセキュリティやコンプライアンスと運用セキュリティといったセキュリティ分野における知識・技術の証明になり、セキュリティインシデントに対応するための知識も評価されます。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

4クリップ

投稿2019/01/24 04:19

例えば、firebaseが提供しているgoogleプロバイダーの認証機能を使って、GETしたユーザーのuidを
Usersコレクションの中のdocumetのidとして扱うとします。
この際に、ユーザーのプロフィールページのurlに、このuidを使うような設計は
セキュリティ的にいかがなものかと思いました。
確かに、ユーザーのemailとpasswordを知らないと、uidを知っていても、ユーザーの情報を扱えないという意見は
あります。
しかし、少ないからず、ユーザーのセキュリティを弱くしてしているかもしれないという懸念があることと、
googleの認証プロバイダーを使うケースでは、勝手にuidを公開状態にしたことになると思います。
セキュリティ的に問題ないでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

セキュリティ的に問題ないでしょうか。

問題ないです。
ユーザーを識別するためのIDに過ぎないからです。
そのIDを知ったところでその人になりすますことはできません。
なのでこの質問に関しては

確かに、ユーザーのemailとpasswordを知らないと、uidを知っていても、ユーザーの情報を扱えないという意見はあります。

この意見しかありません。
Firebaseだからといって難しく考えすぎなのかなと思います。

例えばですがAirbnbはご存知でしょうか。
別に知らなくても良いのですが、以下の{id}の部分に適当な「数字」を入力してブラウザでアクセスしてみてください。
https://www.airbnb.jp/users/show/{id}

IDに紐づくユーザーのプロフィールが確認できたかと思います。
では次に、このIDだけを使ってその人のプロフィールを適当な文字列で更新してしてみてください。

できましたか?
できないですよね。単純にそういうことなんです。

googleの認証プロバイダーを使うケースでは、

どの認証プロバイダを使おうがuidは、上記の通りユーザーを識別するためのIDに過ぎません。
その人になりすまして何かをするためには、その人の認証情報でログインする必要があります。

<補足>
認証後の一時トークンに関してはmiyabi-sunさんが回答している通りです

投稿2019/01/24 07:29

xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaggle

2019/01/24 08:43

ご回答ありがとうございました。
guest

0

uidってなんじゃ?と思って調べてみました。【二度目】
https://firebase.google.com/docs/auth/admin/manage-users?hl=ja#create_a_user

Firebase Authentication によって生成されます。
つまり、Webサービス毎にFirebaseのアカウントを切ればその度に一意なuidが作られるんですね。

つまり、悪意のユーザーがAさんのuidを盗みだして、他のFirebaseサービスに持っていっても
他のFirebaseサービスは「そんなユーザー知らねえよ」と返してくるんですよね。
であれば、連番のユーザIDを使うより「よっぽど安全」ですし、むしろ積極的に使い倒したほうが良いでしょう。

自分にしか見せては行けないデータは、
ログインしている現在ユーザと対象のuidを突合させて、一致するときだけ扱えるようにしておけば十分だと思います。

投稿2019/01/24 04:33

編集2019/01/24 07:40
miyabi-sun

総合スコア21194

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaggle

2019/01/24 07:04

ご返信ありがとうございます。 ID トークン自体は、一時的なものだと思うのですが、ID トークンの中のuidに関しては一意なもので、同じユーザーであれば、何度もでもID トークンの中のuidは同じではないかと考えます。 例えば、以下の公式ページのurlの中では、 "allow create: if exists(/databases/$(database)/documents/users/$(request.auth.uid))" という表記もあるので、uidをdocumentのidとしている見れます。 https://firebase.google.com/docs/firestore/security/rules-conditions?hl=ja
miyabi-sun

2019/01/24 07:41

あ、そうですね。 uidってブラウザも持ってるしなんだろう…というわけでもう少し深く調査しました。 サービス&ユーザ毎に振られる固有のIDなだけでした。 これはむしろ積極的に使うべきと思うので解答欄を修正しました。
kaggle

2019/01/24 08:42

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問