2017-06-07 16 views
3

どこから始めるべきか分かりませんが、最近私はFirebaseというサーバーデータベースを探していませんでしたが、興味深いですが、私のapiコードをjsファイルに直接書き込むことに心配していました。ソースを介して私はあなたが読み取り/書き込みのルールを変更することができ、認証が必要であることを読んだことがあります。ので、私はもはや心配APIについてのいくつかのページ firebaseとauthはどれくらい安全ですか?

が、主な質問を通して読んだ後ではありません:

私は/私の管理ページははlocalhost/adminにありますたとえばので、私のページのための管理ポータルを作成したいです < < <ページには、単にポータルにアクセスすることであるログインフォームを持っていますので、すべてが、私は正常にログインするとき、それはそのページに私をリダイレクトしますが、誰かがソースに目を通すことができるように

var config = { 
    apiKey: "", 
    authDomain: "", 
    databaseURL: "", 
    projectId: "", 
    storageBucket: "", 
    messagingSenderId: "" 
}; 

firebase.initializeApp(config); 

firebase.auth().onAuthStateChanged(function(user) { 

     if (user) { 
     window.location = '/portal.html' 
     } 

     else { 
     // Do nothing 
     } 
}); 

$("#loginbtn").click(function() { 

var email = $('#login-name').val(); 
var password = $('#login-pass').val(); 

firebase.auth().signInWithEmailAndPassword(email, password) 
    .catch(function(error) { 
    // Handle Errors here. 

}); 

}); 

に設定されていますコードして手動でそのページに行き、それを入力しますか?

私は1ページアプリケーションを構築し、ログイン後にページの状態を変更することを決めたとしても、後で何をしようとしていても、誰かがコードを見つけて注入することができますか?

私は実際にはこれについて専門家ではありませんが、プロジェクトを開始する前に私が考えていたものですから、別の方法がありますか?

+0

cartant私はあなたが目を持っているなら、何かに質問を関連付けるのを止めてください。私が話している問題は、APIキー公開ではない「認証」についてです。 – skyline33

+0

libaraiesを通してルーティングすることも考えてくださいfiresafeとしてhttps://firebase.googleblog.com/2014/02/firesafe-add-complex-security-logic-to.html –

答えて

3

管理者機能を追加したい場合、Firebaseリアルタイムデータベースを使用している場合、管理者が制限付きデータにアクセスできるようにするカスタムFirebaseルールを設定する必要があります。したがって、管理者以外のユーザーがサインインすると、管理者のみのデータを変更またはアクセスすることはできません。 Firebaseのルールでこれを行う方法の1つは、/whitelistノードをuid1: "[email protected]", uid2: "[email protected]"とし、すべてのホワイトリストの管理UIDを格納し、制限付き管理専用ノードの最上位セキュリティールールを".write": "auth != null && root.child("whitelist').child(auth.uid).exists()"とすることです。それはかなり単純ですが、長い道のりです。

リアルタイムデータベースを使用せず、従来のWebアプリケーションを構築する場合は、制限付きの管理専用リソースを保護する必要があります。 Firebase IDトークンをバックエンドに送信する必要があります。その値でセッションクッキーを設定し、Firebase IDトークンがリフレッシュされたときにそのセッションクッキーを1時間ごとに更新するようにして、それを行うことができます。クッキーがあなたの要求とと​​もに送られると、それをチェックし、それを解読し(Firebase Admin SDKを使用することができます)、それが所属するユーザが管理者であることを確認します。その場合、アクセスを許可することができます。それ以外の場合は、アクセスをブロックします。すべてのページで、onAuthStateChangedリスナーを追加します。 nullでトリガーすると、サインインページにリダイレクトされます。セッションクッキーに管理者以外のユーザーのIDトークンが含まれている場合は、サーバー上の非管理者のユーザーにHTTPリダイレクトを行うことができます。

tldr;リクエストとともにFirebase IDトークンを送信し、そのユーザが十分な特権を持っているかどうかを再確認することで、バックエンドのチェックを強制する必要があります。

+3

ポイント1については、最近、私はたぶん 'uid1: 'を持つ' /ホワイトリスト'ノードを持っています。bojeil @ "auth!= null && root.child("ホワイトリスト ")。子(auth(" whitelist ")のように、" bla.com "、" uid2: "[email protected]"あなたはこのサンプルをあなたの答えに追加してください。:-) –

+0

完了。おかげさまでフランクに感謝します。 – bojeil

関連する問題