【问题标题】:Secure JSON Web Tokens with PHP & Firebase使用 PHP 和 Firebase 保护 JSON Web 令牌
【发布时间】:2016-09-19 05:32:18
【问题描述】:

我正在使用Firebase Token Generator 在 PHP 中生成安全令牌:

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 脚本安全的最佳做法是什么?

【问题讨论】:

    标签: javascript php firebase jwt firebase-security


    【解决方案1】:

    我发现我需要在我的服务器端脚本中移动客户端逻辑,以确保它是安全的。我现在使用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 数据库中。

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2018-05-13
      • 2014-08-16
      • 2013-03-27
      • 2014-06-30
      • 2020-06-20
      相关资源
      最近更新 更多