如何实现一个符合 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355