我不知道从哪里开始,但我最近在搜索没有服务器数据库的时候看到'Firebase',虽然我觉得很有趣,我有点担心将我的api代码直接放在js文件中,显然可以从源头看到,但我已经读过你可以改变读/写规则并需要认证。所以在阅读完一些页面后我不再担心API
但主要问题是:
我想为我的页面创建一个管理门户,所以我的管理页面位于 localhost / admin / <<<该页面将只有一个登录表单,用于访问门户网站,因此一切都已设置
var config = {
apiKey: "",
authDomain: "",
databaseURL: "",
projectId: "",
storageBucket: "",
messagingSenderId: ""
};
firebase.initializeApp(config);
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
window.location = '/portal.html'
}
else {
// Do nothing
}
});
$("#loginbtn").click(function() {
var email = $('#login-name').val();
var password = $('#login-pass').val();
firebase.auth().signInWithEmailAndPassword(email, password)
.catch(function(error) {
// Handle Errors here.
});
});
因此,当我成功登录时,它会将我重定向到该页面,但有人可以查看源代码,然后手动转到该页面并输入它吗?
或者即使我打算构建一个页面应用程序并决定在登录后更改页面状态,之后我会做什么功能,有人还能找到并注入代码吗?
我不是真的很专家,但这是我在开始我的项目之前的想法,所以还有其他方法吗?
答案 0 :(得分:4)
如果您要添加管理功能并且使用的是Firebase实时数据库,则需要设置一些自定义Firebase规则,以便仅允许管理员访问受限制的数据。因此,如果非管理员用户登录,则他们无法修改/访问仅管理员数据。
使用Firebase规则执行此操作的一种方法是使用/whitelist
节点uid1: "bojeil@bla.com", uid2: "puf@bla.com"
来存储所有列入白名单的管理UID,然后使用顶级安全规则来限制仅受管理的节点".write": "auth != null && root.child('whitelist').child(auth.uid).exists()"
。这很简单,但还有很长的路要走。
如果您不使用实时数据库并构建传统Web应用程序,则需要保护受限管理员资源。您需要将Firebase ID令牌发送到后端。您可以通过设置会话cookie及其值来确保在刷新Firebase ID令牌时每小时更新一次会话cookie。当cookie与您的请求一起发送时,您检查它,解码它(您可以使用Firebase管理SDK)并检查它所属的用户是否为管理员。如果是这样,您可以允许访问,否则您将阻止访问。在每个页面上,您将添加一个onAuthStateChanged侦听器。如果触发为null,则重定向到登录页面。如果会话cookie包含非管理员的ID令牌,则可以在服务器上对用户非管理员部分执行HTTP重定向。
tldr;您需要通过向请求发送Firebase ID令牌并对其用户具有足够权限的双重检查来强制执行对您后端的检查。