0

SITUATION:Firebaseログインの前後に自分のデータが消されるようにするにはどうすればよいですか?

私がログインするときに、データにユーザ入力をサニタイズしようとしています

消毒は、サーバー側を行うべきであるが、Firebaseログインがクライアント上で実行する必要があります。

私の考えは次のとおりです。ajaxリクエストを作成してデータをサニタイズし、次にサニタイズされたデータでログインします。

データベースに特定のログイン情報を書き込むための2番目のajaxリクエストを作成します(これは必須ですが、ログイン自体には直接関係しませんが、ログイン後に行う必要があります)。


問題:

私が持っている問題は以下の通りです:

私は、セキュリティスタック交換に尋ね、彼らはそれが簡単にできたので、最初のAJAXリクエストは基本的に役に立たなかったと言ってくれましたバイパスされる。

意味ユーザーは非圧縮データを入力でき、そのデータはログインFirebase機能の電子メールとパスワードのフィールドに渡されます。

私はsanitisationコードを2番目のajaxリクエストに移動し、最初のものを削除して、データベースに書き込むすべてのデータが消毒されるようにすることができますが、ログイン機能フィールドの処理方法はわかりません。

また、最初のajaxリクエストでは、recaptchaがチェックされます。


QUESTION:

は、どのように私は、すべてのデータがサニタイズされ、reCAPTCHAのが正しく、そのチェックを回避することができない方法で検証されていることを確認することができますか?

$("#loginForm").submit(function(e) { 

    e.preventDefault(); 
    var email = $("#loginEmail").val(); 
    var password = $("#loginPassword").val(); 

    $this = $(this); 
    $.ajax({ 
     type: "POST", 
     url: "login", 
     data: $this.serialize() 
    }).done(function(data) { 

     console.log("GO!"); 

     if (data) { 

      firebase.auth().signInWithEmailAndPassword(data.email, data.password).then(authData => { 
       $.ajax({ 
        type: "POST", 
        url: "login2", 
        data: authData 
       }).done(function(result) { 
        if (result == "SUCCESS0!") { 
         localStorage.setItem('amazingProMembership',true); 
         localStorage.setItem('success_msg_local2', 'You have logged in'); 
         window.location.href="/screenshots/index"; 
        } 
        else if (result == "SUCCESS1!") { 
         localStorage.setItem('success_msg_local2', 'You have logged in'); 
         window.location.href="/screenshots/index"; 
        } 
        else if (result == "ERROR!"){ 
         firebase.auth().signOut().then(function() { 
          localStorage.setItem('error_msg_local', 'Please confirm your email address. Check your inbox.'); 
          window.location.href="https://stackoverflow.com/users/login"; 
          ("Login Failed: ", error); 

         }); 
        } 
       }); 

      },function(error) { 

       var errorCode = error.code; 
       var errorMessage = error.message; 
       localStorage.setItem('error_msg_local', "Unknown user or password"); 
       window.location.href="https://stackoverflow.com/users/login"; 
       ("Login Failed: ", errorMessage, errorCode); 

      }); 
     } 
     else { 
      localStorage.setItem('error_msg_local', 'Recaptcha failed'); window.location.href = "https://stackoverflow.com/users/login"; 
     } 
    }); 
}); 

答えて

1

あなたは、データが正しく、サーバー側でCloud Functions for Firebaseでそれを行うための最も簡単で安全な方法を検証し、消毒されていることを確認したい場合は、リアルタイムデータベースにデータを追加します。必要に応じてデータを変更するために、対象の場所でデータが変更されるたびに実行するようにdatabase triggerを書くことができます。関数は、必要に応じて、recaptchaを含む他のAPIも呼び出すことができます。

+0

これを使用して、ユーザーの作成に使用されるデータもサニタイズできますか? (そのデータはデータベースに書き込まれず、私の知る限り認証システムに書き込まれます) – TheProgrammer

+0

新しいユーザーが作成されたときに実行される認証トリガーを作成し、必要に応じてさらに変更を加えることができます。しかし、私はまだデータベースにプロファイルデータを保存していますので、Firebase認証のユーザーオブジェクトを持っていなくてもアクセスできます。 –

+0

認証データを含むすべてのデータもdbに格納されています(パスワードを除いて)。ユーザーが迷惑メールの認証システムで作成されていないことを確認する方法は不思議です。 – TheProgrammer

関連する問題