如何实现一个符合 GDPR 的“雾论坛”

为什么"防火墙"频频失效

由于频发数据隐私事件,个人和政府对于数据隐私越发重视,根据今年两会新闻发布会的消息:全国人大常委会已将制定个人信息保护法列入本届立法规划。前有 GDPR,后有在路上的新法律,这个时代,作为开一个开发者,如何才能保证自己开发的 App 能有效的保护用户的数据呢?

众所周知,现在的 App 开发,基本包含了 Web App、Android、iOS、Applet 等各种端的开发。为了开发效率和方便管理,一般都是后端为以上所有的 Client 端提供统一的 API 以供调用。

由于各个开发者采用的技术栈的差别,开发出来的 API 也是百花齐放。这也同时导致了各种没有足够安全考量的 API 成了数据泄露的重灾区。

绝大部分在 API Gateway 层面的防御机制(包括我曾经参与过开发的 "360网站卫士")效果十分有限也正是由于协议层以及编码层的复杂性导致。

数据安全新思路

做过安全的同学都应该知道一个原则:

安全防护的最佳切入点在整个系统架构收敛的点

所以,如果重新考虑现在后端开发的基本架构,我们可以发现:除掉 API Gateway 系统中另一个收敛的点就是 数据库调用层

Typical App Arch

CovenantSQL 是运行的开放的互联网上的网格数据库。针对传统 SQL 数据库的短板,做出了如下的补充:

  1. Bitcoin 级别的传输加密:ETLS & DH-RPC;
  2. SQL 白名单;
  3. 每条 SQL 都上链,可信的计费 & 审计;
  4. 传统 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 规范的语法,改造的过程非常简单,基本上就是

  1. 把 import 中的包替换

    >    "github.com/lib/pq"
    ---
    <    "github.com/CovenantSQL/CovenantSQL/client"
    
  2. 修改数据库初始化过程

    // 替换 DSN(Database Serial Num)替换成 CovenantSQL 格式的
    // ...省略部分细节代码  
    <    db, err := sql.Open("postgres", dsn)
    ---
    >    db, err := sql.Open("covenantsql", dsn)
    
  3. 把 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 拥有了以下功能:

  1. 包含数据库和文件全部存储在了 大雾 中;
  2. 天然符合严苛的欧盟GDPR(通用数据保护条例);
  3. 由于上一个特性,这也就让 CovenantForum 成为了一个真正意义上的 P2P 系统;通俗一点说就是没有第三方可以控制的网络,用户只要有初始私钥 GRANT 的权限,就可以登录,自由进行发言;
  4. 所有的帖子和内容都可以在 SQLChain Explorer 上查询到。
Forum Threads on CovenantSQL SQLChain

我们做了一个架构图的对比,方便大家对比两种不同 App 结构的区别:

Traditional & Decentralized Forum

如何搭建自己的论坛

从那遥远海边 慢慢消失的你 本来模糊的脸

竟然渐渐清晰 想要说些什么 又不知从何说起

只有把它放在心底 茫然走在海边 看那潮来潮去

徒劳无功 想把每朵浪花记清 想要说声爱你

​ ——《大海》陈大力

TODO

CovenantForum 目前还有很多问题,也是我们接下来想要去解决的:

  • 目前还依赖 OAuth 登陆,用户认证方面和 Server-less 结合的不是很紧密;
  • 配置还有点复杂,后面我们将化简 CovenantForum 和 CovenantSQL 的配置;
  • 简化创建新的论坛的流程,方便大家创建自己的留言板。

Links

  • Demo
  • CovenantForum Github
  • CovenantSQL Github

你可能感兴趣的:(如何实现一个符合 GDPR 的“雾论坛”)