4

私のアプリケーションは、Googleを使ったAngularJS + Firebase認証を使用しています。以下に示すように、それはデータベースにそのユーザーのエントリを作成したアプリケーションにユーザーがサインアップとして :許可されたユーザーからの自分のデータを更新するためのfirebaseデータの保護

user 
    ->Firebase Unique Key 
      -> UserId: "google ID" 
      -> User Name: "User Name" 
      -> Payment Status:"No" 

今、ユーザーがログイン後、ユーザーが支払いオプションと支払い後は、その特定のIDのデータベース値を行われているが表示されますされます上記のJSONに示すように、「Payment Status」に対して値が設定されます。支払いステータスが「はい」になると、ユーザーだけがメインページを表示することができます。

以下に示すように、私はセキュリティルールを作成しました:

{ 
"rules": { 
    ".read": "true", 

    "user":{ 
    ".write": "auth.provider == 'google' && auth.uid!=null" 

    } 
}} 

今の質問は次のとおりです。グーグルを使ってログインできるすべてのユーザがこのデータベースへの書き込みアクセス権を持っています。したがって、一度ユーザーが承認されると、ユーザーはデータベースを変更することができます。また、ユーザーはlocalhostから自分のコードを実行してデータベースを変更することができます。データをハックして支払いステータスを「はい」とマークしてメインのWebサイトに進むことは望ましくありません。

権限のあるユーザーがこのデータベースで悪意のある行為をしないようにする方法。

答えて

2

FirebaseはIDベースのセキュリティモデルを使用します。つまり、ユーザーの身元に基づいてデータへのアクセスを保護します。ユーザーに特定のプロパティを書き込む権限を与えたら、そのプロパティを書き込むことができます。

ユースケースでは、ユーザーが支払いステータスを変更できるようにすることは悪い考えです。だから彼らは自分のアプリや独自のコードを実行しているかどうかにかかわらず、そのプロパティへの書き込みアクセス権を持ってはいけません。

したがって、別のエンティティにそのフィールドを設定させる必要があります。これは、人間の管理者またはサーバーのいずれかになります。

人間の相互作用を持つことは、あなたが考えるほど珍しいことではありません。多くのWebサービスは、所有者に支払いを確認させ、保護されたメタデータ(シナリオでの支払い状況)を更新することから始まります。これが管理不能になると、おそらく他のオプションの準備ができているはずです。

server can run under trusted credentialsの場合は、必要なチェックを行い、ユーザーの支払いステータスを設定します。これはFirebaseデータベースとやり取りするものなので、非常に軽いサーバである必要はありません。 this article for a good explanationを参照してください。

+0

フランクの回答に感謝します。しかし、ユーザーがローカルホストで同じコードのコピーを実行できないようにするには、Firebaseには何もありません。データベースにアクセスすると、自分のローカルホストからfirebase URLを参照することで、悪意のある行為を確実に実行できます。 localhost – Lani

+0

"firehostには、ローカルホストで同じコードのコピーを実行しないようにする方法がありますか?"いいえ、それはあなたの質問ですが、重複としてマークする。ユーザーがコードのコピーを実行していて、設定したセキュリティルールに固執している場合、どのような悪意のある使用方法がありますか? –

+1

いくつかの悪質なスクリプトを格納することで、データベースをあふれさせることができます。上記のあなたの答えによると、私はサーバーを使用する場合にのみこれを停止することができます。しかし、私はちょうどクライアント側の言語とfirebaseを使用する場合は、その場合、彼らはデータベースにアクセスすると、データベースに何かを格納することができます。 – Lani

関連する問題