2016-05-22 2 views
2

による安全なJSONウェブトークン私はPHPで安全なトークンを生成するためにFirebase Token Generatorを使用しています:クライアント側でPHP&Firebase

const DEFAULT_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 

date_default_timezone_set('Europe/London'); 

try { 
    $generator = new TokenGenerator(DEFAULT_SECRET); 
    $token = $generator 
     ->setOptions(array(
      'expires' => strtotime('now + 1 minute'), 
      'debug' => true 
     )) 
     ->setData(array('uid' => 'exampleID')) 
     ->create(); 
} catch (TokenException $e) { 
    echo "Error: ".$e->getMessage(); 
} 

$response = array(
    'token' => $token 
); 

echo json_encode($response); 

私はJSONオブジェクトとしてトークンを取得するために、JSONリクエストを使用しています:

$.getJSON('http://localhost/firebase/index.php', function(json) { 
     var jwtToken = json.token; 
     launchFirebase(jwtToken); 
}); 

    function launchFirebase(token) { 
     var fb = new Firebase(FirebaseURL); 

     fb.authWithCustomToken(token, function(error, authData) { 
     if (error) { 
      alert("There was an error posting your vote. Please try again later."); 
     } else { 
      checkEmail(); 
     } 
     }); 

     function checkEmail(){ 
     new Firebase(FirebaseURL) 
      .orderByChild('email') 
      .startAt(vote.email) 
      .endAt(vote.email) 
      .once('value', function(snap) { 
      var result = snap.val(); 
      callback(result); 
     }); 
     } 
    } 

これでFirebaseのデータを読み込めるようになりました。私のセキュリティ上の懸念は誰でもソースコードを表示し、PHPスクリプト(http://localhost/firebase/index.php)に直接アクセスしてトークンを取得できることです。

そして、彼らは、このようなAPIの呼び出しを介してすべてのデータを表示できます。https://examplesite.firebaseio.com/.json?print=pretty&auth=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PHPスクリプトをセキュアに維持するためのベストプラクティスは何ですか?

答えて

0

私は、サーバ側のスクリプト内でクライアントロジックを安全に移動する必要があることを知りました。私は現在Firebase PHP Clientを使用しています。私のPHPスクリプト内

私が持っている:

const DEFAULT_URL = 'https://examplesite.firebaseio.com/'; 
const DEFAULT_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; 
const DEFAULT_PATH = '/'; 

$firebase = new \Firebase\FirebaseLib(DEFAULT_URL, DEFAULT_TOKEN); 

// --- reading the Firebase database --- 
$database = $firebase->get(DEFAULT_PATH); 

$searchString = $_GET["email"]; 

if (strpos($database,$searchString) !== false) { 
    $response = array(
     'emailExists' => true 
    ); 
} else { 
    $response = array(
     'emailExists' => false 
    ); 
} 

echo json_encode($response); 

をし、クライアント側で私が持っている:情報については

findUser: function(email, callback){ 

    $.getJSON('https://PHP_LOCATION.com/index.php', { 
    email: email 
    }, function(json) { 
     callback(json.emailExists); 
    }); 

} 

を ':このスクリプトの目的は、かどうかをチェックすることです電子メールアドレスはすでにFirebaseデータベースに存在します。

関連する問題