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

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

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

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

Firebase

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

Node.js

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

JavaScript

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

Q&A

解決済

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

kaggle
kaggle

総合スコア17

Security+

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

Firebase

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

Node.js

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

JavaScript

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

2回答

0グッド

4クリップ

9185閲覧

投稿2019/01/24 04:19

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

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

4

ベストアンサー

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

問題ないです。
ユーザーを識別するための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

総合スコア4254

kaggle, miyabi-sun, shoya.shiraki, MasakiHori👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

kaggle

2019/01/24 08:43

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

1

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

総合スコア21039

kaggle👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Security+

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

Firebase

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

Node.js

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

JavaScript

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