- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我读过 Firebase对于我想做的事情来说,它看起来棒极了。我已经阅读了有关身份验证以及如何根据规则授权某些登录用户执行不同操作的内容。很好。
但是,我不确定另一种类型的安全性:如何确保只有我自己的站点(使用客户端 javascript)可以与我的 firebase 后端通信?我问是因为 afaik 没有办法阻止任何人从客户端代码(指向我特定的 firebase 后端的 url)查找我的 firebase 端点并开始使用它,天知道是什么。
在我想打开对匿名用户 Angular 色的写入的情况下,这尤其令人担忧。 (例如:可能有一些分析)
非常感谢能帮助我理清思路。
最佳答案
Update (May 2021): Thanks to the new feature called Firebase App Check, it is now actually possible to limit calls to your backend service to only those requests coming from iOS, Android and Web apps that are registered in your Firebase project.
You'll typically want to combine this with the user authentication based security that Kato describes below, so that you have another shield against abusive users that do use your app.
在我看来,与其说这是一个关于 Firebase 安全性的问题,不如说是对当今互联网架构的一般性讨论。由于网络是一个开放平台,您无法阻止任何人访问 URL(包括访问您的 Firebase),就像您无法阻止某人在现实世界中开车经过您的房子一样。如果可以,访问者仍然可以对来源站点撒谎,而且也没有办法阻止这种情况。
通过身份验证保护您的数据。使用 Forge 中的授权域来防止 CSRF .放security rules以防止用户做他们不应该做的事情。您将使用服务器来防止的大多数数据写入都可以仅通过安全规则来完成。
这实际上是 Firebase 和一般 API 服务的优良品质之一。客户端是完全隔离的,因此很容易被替换或扩展。只要你能证明你被允许进入,并遵守规则,你从哪里打电话并不重要。
关于匿名访问,如果你能让他们只从你的网站访问,那仍然不会阻止恶意写入(我可以打开我的 JavaScript 调试器,坐在你的网站上,想写多少次就写多少次)。相反,对匿名用户可写入的数据的格式、内容和长度设置严格的安全规则,或者为自己节省一些时间并寻找现有服务来为您处理分析,例如无处不在的 Google Analytics。
当然,您可以像使用任何数据存储一样使用服务器作为中介。这对于某些无法通过安全规则强制执行或无法信任经过身份验证的用户的高级逻辑(如高级游戏机制)很有用。但是,即使您将 Firebase(或任何数据库或服务)隐藏在服务器后面以防止访问,服务器仍然会有一个 API,并且仍然面临识别客户端来源的所有相同挑战,只要它在网络上。
匿名访问的另一种替代方法是使用 custom login ,这将允许服务器创建自己的 Firebase 访问 token (用户不必为此进行身份验证; token 的签名完全取决于您)。这是有利的,因为如果匿名用户行为不当,则可以撤销访问 token (安全规则使用 by storing a value in Firebase 来强制访问)。
更新
Firebase 现在有 anonymous authentication内置简单登录,无需为此处的常见用例使用自定义登录。
关于javascript - 如何确保只有我自己的网站(客户端代码)可以与 Firebase 后端对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18890330/
我有以下对象: dog = { location: { x: 52.1089, y: 16.2323 }, f: function(message) { alert
在 TSQL 中,如果我要搜索有效的 .com 电子邮件地址,我需要确保有一个 @ 符号,它以 .com 结尾,并且在 @ 前后至少有一个字符。 SELECT * FROM CUSTOMER WHER
我正在尝试准备一个信用卡交易列表,以便在 Excel 2010 中进行透视和进一步分析(满足个人需求)。问题是我的银行机构没有遵循标准的日期格式,所以有时日期会显示为 Jun. 1, 2013 , 有
看来您不能在 riak 中进行交易。如何确保数据正确? 假设我们要插入评论。在 redis 我会做 commentId=incr commentCount multi SET comment_post
对于下面给定的模式,是否可以确保至少一个属性包含一个值(即 minLength 为 1): { "$schema": "http://json-schema.org/draft-04/sche
我计划在 Haxe 的一个子集中编写 Haxe 库,这些库将编译为每种 Haxe 目标语言。有什么方法可以验证 Haxe 程序是否可以编译为所有目标语言,是否可以在不手动测试每个目标平台上的编译代码的
如果浏览器窗口未聚焦,则当前页面上的所有 webdriver 标识都失败。 如何使用 webdriver 使浏览器成为焦点? 最佳答案 ((JavascriptExecutor) webDriver)
我从这样的 HTML GET 请求中获取图像链接... www.example.com?image=www.anotherdomain.com/image.jpg if (isset($_GET['i
我有一个 eunit 测试,它生成一个唯一的节点名称并开始分发: {A,B,C} = now(), Nodename = list_to_atom(lists:flatten(io_lib:forma
我正在完成我的 iPhone 应用程序。我只是担心我们的网络服务器级别的安全性。数据通过网络服务被传送到 iPhone 应用程序。 我可以在网络服务上采取哪些安全措施,以免受到攻击? 谢谢 最佳答案
我正在编写一个应用程序,该应用程序启动一个运行简单 Web 服务器的子进程。我正在使用 NSTask 并通过管道与其进行通信,一切看起来或多或少都很好。但是,如果我的程序崩溃,子进程将保持事件状态,并
我有一些应用程序,我调用 ShowMessage('Complete!');在长时间操作结束时。 大多数时候,这效果很好,但每隔一段时间,消息对话框就会显示在主窗体后面。 有什么方法可以确保 Show
我通过将消息插入集合并让模板使用 {{#each}} 打印出集合来创建一个简单的聊天。 我不太熟悉安全性,但是有没有办法让它符合 EFF 规定? https://www.eff.org/secure-
我有一个商店,我想在其中正确管理 id。假设我有以下帖子存储: type Post = { id: number; title: string; body?: string; } type
我有一个使用 ajax post 方法和数据表的程序。经过几周的摆弄,我确定我根本不明白 javascript 是如何工作的。这是我的 JavaScript: $('#SaveTimeSheet').
我有一个系统,如果从 Azure 服务总线丢失消息将是一场灾难,也就是说,数据将永远丢失,并且没有实际方法可以在不造成重大中断的情况下修复损坏。 在这种情况下我可以完全依赖 ASB 吗? (即使它
如何确保 scalatest 测试不会并行运行?在 0.12 之前,我有一个 sbt 设置: parallelExecution in Test := false 新版本引入了一些复杂的机制。这种更简
我的端点有两个如下所示的 promise : request.post({ url: url, json: smsSTART, header
简短版本 当 ui-router 转换到新 View 时(以我不完全理解的方式使用 ngAnimate),它会添加类 ng-leave 和 ng-leave-active 到当前 View 。它还将类
目前正在努力寻找验证 2 个表的方法(有效地验证表 A 的大量行) 我有两张 table 表A ID A B C 表格匹配 ID Number A 1 A 2 A 9 B 1
我是一名优秀的程序员,十分优秀!