我正在使用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脚本安全的最佳做法是什么?
答案 0 :(得分: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数据库中是否已存在电子邮件地址。