为什么"防火墙"频频失效
由于频发数据隐私事件,个人和政府对于数据隐私越发重视,根据今年两会新闻发布会的消息:全国人大常委会已将制定个人信息保护法列入本届立法规划。前有 GDPR,后有在路上的新法律,这个时代,作为开一个开发者,如何才能保证自己开发的 App 能有效的保护用户的数据呢?
众所周知,现在的 App 开发,基本包含了 Web App、Android、iOS、Applet 等各种端的开发。为了开发效率和方便管理,一般都是后端为以上所有的 Client 端提供统一的 API 以供调用。
由于各个开发者采用的技术栈的差别,开发出来的 API 也是百花齐放。这也同时导致了各种没有足够安全考量的 API 成了数据泄露的重灾区。
绝大部分在 API Gateway
层面的防御机制(包括我曾经参与过开发的 "360网站卫士")效果十分有限也正是由于协议层以及编码层的复杂性导致。
数据安全新思路
做过安全的同学都应该知道一个原则:
安全防护的最佳切入点在整个系统架构收敛的点
所以,如果重新考虑现在后端开发的基本架构,我们可以发现:除掉 API Gateway
系统中另一个收敛的点就是 数据库调用层
:
CovenantSQL 是运行的开放的互联网上的网格数据库。针对传统 SQL 数据库的短板,做出了如下的补充:
- Bitcoin 级别的传输加密:ETLS & DH-RPC;
- SQL 白名单;
- 每条 SQL 都上链,可信的计费 & 审计;
- 传统 DBMS + PKI 的权限 GRANT 机制。
也正是由于这些 Features 的加入,使得后端开发的方式可以变成 Server-less。也就是说我们可以尝试把业务逻辑全部放在 Client 端,把数据存储在 CovenantSQL 提供的 雾计算(Fog Computing)数据库服务中。
雾计算(英语:Fog Computing)或雾联网(fog networking,或fogging),是使用最终用户终端设备或连接最终用户设备的边缘设备,以分布式协作架构进行数据存储(相较于将数据集中存储在云数据中心),或进行分布式网络数据包传输通信(相较于透过互联网骨干路由),或相关分布式控制或管理。
——From: 维基百科
基于雾计算的留言板
基于 CovenantSQL 测试网,我们挑选了一个简单的留言板应用,进行了改造,并将改造后的所有代码基于 MIT License 开源:CovenantForum
CovenantForum 是基于 disintegration/bebop 改造而来的。bebop 本身仅支持 MySQL & PostgreSQL 作为数据库;使用 OAuth 2.0 进行用户认证,并把用户的首字母作为默认头像,存储在类 S3 系统或者 本地文件系统。
如何改造一个普通 App
CovenantSQL 的 SQL 语法比较类似 PostgreSQL 这种比较符合 SQL-92 规范的语法,改造的过程非常简单,基本上就是
-
把 import 中的包替换
> "github.com/lib/pq" --- < "github.com/CovenantSQL/CovenantSQL/client"
-
修改数据库初始化过程
// 替换 DSN(Database Serial Num)替换成 CovenantSQL 格式的 // ...省略部分细节代码 < db, err := sql.Open("postgres", dsn) --- > db, err := sql.Open("covenantsql", dsn)
-
把 SQL 语句中
$1
这样的占位符替换成@1
或者按照默认位置的?
> _, err = tx.Exec(`update comments set deleted=true where id=$1`, id) --- < _, err = tx.Exec(`update comments set deleted=true where id=@1`, id)
完整的修改 diff 参见这里
CovenantForum Demo
当然,懒得自己动手的朋友可以直接访问我们的 Demo
CovenantForum 的特点
经过我们的改造,CovenantForum 拥有了以下功能:
- 包含数据库和文件全部存储在了
大雾
中; - 天然符合严苛的欧盟GDPR(通用数据保护条例);
- 由于上一个特性,这也就让 CovenantForum 成为了一个真正意义上的 P2P 系统;通俗一点说就是没有第三方可以控制的网络,用户只要有初始私钥 GRANT 的权限,就可以登录,自由进行发言;
- 所有的帖子和内容都可以在 SQLChain Explorer 上查询到。
我们做了一个架构图的对比,方便大家对比两种不同 App 结构的区别:
如何搭建自己的论坛
从那遥远海边 慢慢消失的你 本来模糊的脸
竟然渐渐清晰 想要说些什么 又不知从何说起
只有把它放在心底 茫然走在海边 看那潮来潮去
徒劳无功 想把每朵浪花记清 想要说声爱你
——《大海》陈大力
TODO
CovenantForum 目前还有很多问题,也是我们接下来想要去解决的:
- 目前还依赖 OAuth 登陆,用户认证方面和 Server-less 结合的不是很紧密;
- 配置还有点复杂,后面我们将化简 CovenantForum 和 CovenantSQL 的配置;
- 简化创建新的论坛的流程,方便大家创建自己的留言板。
Links
- Demo
- CovenantForum Github
- CovenantSQL Github