2016-05-22 2 views
2

Я использую Firebase Token Generator для создания безопасных лексемы в PHP:Безопасные JSON веб-токены с 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

Что лучшая практика, чтобы обеспечить РНР скрипт?

ответ

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.

Смежные вопросы