大家都冒充 `Mozilla` --- 科学的检测用户浏览器

https://a-wing.top/browser/2021/08/22/user-agent.html

用户的特殊浏览器

经常有用户使用奇怪的浏览器,来使用我们的产品,然后出问题。

因为产品上的音视频使用了浏览器的 WebRTC 特性,所以对浏览器的要求就很高

当然,从原则上来看,是不应该根据 User-Agent 来提供差异化服务的,应该使用另一种方式:feature detection

可以使用 modernizr 来进行 feature detection

毕竟 WebRTC 是由浏览器 API 组成,通过探测这些 API 是否存在,来判读是否可以使用 WebRTC

但是这个不够严谨,WebRTC 是很新的东西,有些浏览器可以支持,但是支持不够完整和稳定性都有问题。

Web Real-Time Communications (WebRTC) transforms the communications landscape; becomes a World Wide Web Consortium (W3C) Recommendation and multiple Internet Engineering Task Force (IETF) standards

WebRTC 改变了通信格局; 成为 W3C 和 IETF 官方标准

———— 2021.01.26

所以我们需要去检测用户到底用了什么浏览器,是如何出现了问题的。一个很通用的办法就是检测 User-Agent

从黑曜石浏览器(HEICORE)说起

某年的科大的 CTF 要使用黑曜石浏览器去解题。当然,所谓的黑曜石浏览器是不存在的

不得不说,黑曜石浏览器是我用过最好用的浏览器 用户体验极佳

—— 知乎某用户 如何评价黑曜石浏览器(HEICORE)?

通过设置 User-Agent ,把自己伪装成了黑曜石浏览器

curl http://202.38.95.46:12001/ -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) HEICORE/49.1.2623.213 Safari/537.36"

出自中国科学技术大学第五届信息安全大赛

User-Agent 是什么

用户不能直接去互联网上获取信息,需要一个软件去代表用户的行为,这个软件就是 User-Agent (用户代理)

浏览器就是一种 User-Agent 。用户使用不同的软件去用统一的协议去做相同的事情。

这也是定义在 http 请求里的,每一条 http 请求一定会携带 User-Agent 头

网站的服务者可以通过 User-Agent 头来判断用户使用了什么浏览器,当然也可以根据 User-Agent 的内容来提供差异化的服务

标准语法和历史

原本 User-Agent 浏览器的语法 是很清晰的

User-Agent: <product> / <product-version> <comment>

因为可以根据 User-Agent 的内容来提供差异化的服务,所以当年在浏览器大战时期,浏览器的实现各不相同。 当年 Mozilla (Firefox 的前身)浏览器最强的,很多网站都只对 Mozilla 提供高质量的服务,后来有人把自己伪装成了 Mozilla (没错,就是 IE 先开始的)。 从此 Mozilla/5.0 就变成了 User-Agent 的第一段

后来的浏览就在这上面不断扩充,就像今天这样:

Linux / Firefox

Mozilla/5.0 (X11; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0

Mac OS / Safari

Mozilla/5.0 (Macintosh; Intel Mac OS X 11_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1 Safari/605.1.15

Chromium OS / Chrome

Mozilla/5.0 (X11; CrOS x86_64 13904.16.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.25 Safari/537.36

Windows / Edge

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4482.0 Safari/537.36 Edg/92.0.874.0

这就变成了,去识别 User-Agent 变得很困难。目前的识别基本上都是使用正则表达式,配合自己的 User-Agent 库来判断

这方面的库有很多,对比很多后,这个库是比较全的 ua-parser-js

目前几乎所有的网站识别浏览器都是 User-Agent 来判断,目前有两个接口:

前端有浏览器接口:

window.navigator.userAgent

后端可以通过浏览器的 http request header 来拿到 User-Agent

user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36

如何使用 User-Agent

另外,在移动端。因为算力的问题,在有些老旧的处理器上也会出现卡顿的情况

当然,我们可以在浏览器里跑一下 Benchmark 来判断算力是否够用

不过,移动端的 User-Agent 会携带处理器信息(可以去查数据库来判断)

综上,目前所进行的操作是:检测用户浏览器,给予提示,并在文档页显示支持性列表

最后,要通过定义的规则生成这样一个表格

browser-list

为了降低未来的维护成本要使用一套数据源,既可以检测,又可以在文档页生成列表

ua-parser-js 的返回结果的数据结构比较科学,直接复用这一数据结构

interface Result {
  ua: string;
  browser: {
    name: string | undefined;
    version: string | undefined;
  };
  device: {
    model: string | undefined;
    type: string | undefined;
    vendor: string | undefined;
  };
  engine: {
    name: string | undefined;
    version: string | undefined;
  };
  os: {
    name: string | undefined;
    version: string | undefined;
  };
  cpu: {
    architecture: string | undefined;
  };
}

这样我们可以定义三条规则:

  • daily_list (某个测试版的浏览器)
  • white_list (测试过没有问题的浏览器)
  • black_list (已知有问题的浏览器)
// 存在优先级关系: daily_list > white_list > black_list
//
// https://www.npmjs.com/package/ua-parser-js
// @params: ua-parser-js.result
// @params: { <list_name>: <whiteList | blackList>}
// @return: string(list_name)
function browserDetect(ua, list) {
  const { daily_list, white_list, black_list } = list
  if (checkList(ua, daily_list)) return 'daily_list'
  if (checkList(ua, white_list)) return 'white_list'
  if (checkList(ua, black_list)) return 'black_list'
  return ''
}

基于这种数据结构,加入一种简单的语法。支持版本号判断,加入这个几种符号的支持:>, , =, <,

由于没有现成可以用的,所以要自己用 compare-versions 写一段判断,遍历整个结构对比全部的版本号

这样的话配置文件就可以这样写:config/browser.yml

# https://www.npmjs.com/package/ua-parser-js
#
# 本文件的语法是在这个库之上做的修改

# 白名单,完全没有问题的版本
white_list:
  - browser:
      name: "Chrome"
      version: ">= 85.0.0.0"
  - browser:
      name: "Firefox"
      version: ">= 85.0.0.0"
  - browser:
      name: "Edge"
      version: ">= 45.0.0.0"
    device:
      type: "mobile"
    os:
      name: "Android"
      version: ">= 10.0"

black_list:
  # 老版本的 Edge 不支持
  - browser:
      name: "Edge"
      version: "< 80.0.0.0"
    os:
      name: "Windows"

  # 手机微信内置浏览器
  - browser:
      name: "WeChat"
    device:
      type: "mobile"

我们的产品的用户上至自己编译浏览器自己用的极客,下至用微信内置浏览器的小白

所以要给使用 beta 版,dev 版,canary 开发版,nightly 版给予提示。这个 WebRTC 不稳定,可能会有问题。

这件事情出现过,有人用了开发版的浏览器,音视频不稳定,然后他又更新了的版本。。。

由于开发版浏览器并不会在 ua 里面携带 dev 的标识。只能通过版本号来判断。可以使用 caniuse-lite 的数据库,取出最新稳定版的的版本号,然后进行版本号比对

但是 caniuse-lite 的数据库有 1.3M 如果直接使用,会打包整个数据库。这个体积的增加了太多

需要优化一下,所以采用把查询结果打包成文件的办法,实际上真正有用的数据非常的少。

创建一个生成器,可以动态创建这个文件 latest_browser_list_generator.js

#!/usr/bin/env node

const browserslist = require('browserslist')
const fs = require('fs')

const list = {
  'firefox': true,
  'chrome': true,
  'edge': true,
}

const latest = browserslist("last 1 version").filter(i => list[i.split(' ')[0]])
fs.writeFileSync('latest_browser_list.js', `export default ${JSON.stringify(latest)}`)

之后定期执行这两个就可以了

  • npx browserslist@latest --update-db
  • node latest_browser_list_generator.js

当然,这个可以用 GitHub action 或 GitLab CI 来每周执行一次

360 浏览器检测

360 浏览器隐藏了自己的 UA 。360 浏览器只有在访问自己的网站(比如:360.cn)是才会在 UA 里携带 QIHU 360SE (360 安全浏览器)或 QIHU 360EE (360 极速浏览器)字段

我们只能使用一下其他的方式,通过一些其他的特征来检测

对待国内浏览器:这个库可以检测到 360

不过这个库的作者并没有提供可以直接使用包。只能把核心代码提取出来

  // https://github.com/mumuy/browser/blob/4a50ee18cc76a5013dea3596bb33fbab9ed584c3/Browser.js#L111-L143
  if (_window.chrome) {
    let chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1')
    if (_window.chrome.adblock2345 || _window.chrome.common2345) {
      match['2345Explorer'] = true
    } else if (
      _mime('type', 'application/360softmgrplugin') ||
      _mime('type', 'application/mozilla-npqihooquicklogin')
    ) {
      is360 = true
    } else if (chrome_version > 36 && _window.showModalDialog) {
      is360 = true
    } else if (chrome_version > 45) {
      is360 = _mime('type', 'application/vnd.chromium.remoting-viewer')
      if (!is360 && chrome_version >= 69) {
        is360 = _mime('type', 'application/hwepass2001.installepass2001') || _mime('type', 'application/asx')
      }
    }
  }

  // 修正
  if (match['Mobile']) {
    match['Mobile'] = !(u.indexOf('iPad') > -1)
  } else if (is360) {
    if (_mime('type', 'application/gameplugin')) {
      match['360SE'] = true
    } else if (
      _navigator &&
      typeof _navigator['connection'] !== 'undefined' &&
      typeof _navigator['connection']['saveData'] == 'undefined'
    ) {
      match['360SE'] = true
    } else {
      match['360EE'] = true
    }
  }

不过这里要注意:navigator.mimeTypes 已经从 Web 标准中移除(也许未来的某天这个方法就没法用了)

判断 360 的版本,是做了一个版本的对应关系

// https://github.com/mumuy/browser/blob/4a50ee18cc76a5013dea3596bb33fbab9ed584c3/Browser.js#L283-L292
function get360SEVersion(u) {
  let hash = { '86': '13.0', '78': '12.0', '69': '11.0', '63': '10.0', '55': '9.1', '45': '8.1', '42': '8.0', '31': '7.0', '21': '6.3' }
  let chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1')
  return hash[chrome_version] || ''
}
function get360EEVersion(u) {
  let hash = { '86': '13.0', '78': '12.0', '69': '11.0', '63': '9.5', '55': '9.0', '50': '8.7', '30': '7.5' }
  let chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1')
  return hash[chrome_version] || ''
}

最后

为了网络环境的健康,为了不重蹈浏览器大战时的覆辙。不要针对特定浏览器提供差异化内容。

我们可以告知用户:「我们没有在这个浏览器上充分测试过」

但不能去禁止某个特定的浏览器,或对不同浏览器提供差异化内容

尽可能使用 feature detection 来判读浏览器的支持情况

打造一个永不遗忘的网

https://www.caa-ins.org/archives/7409
文/山姆.威廉姆斯[Sam Williams]
编译/翠玉

本文根据山姆.威廉姆斯于第五届网络社会年会“实践智慧之网”主题二“网际网络档案馆”发表的主题演讲整理而成。标题原文为”Building a Web that Never Forgets”。本文作者山姆.威廉姆斯为Arweave联合创始人兼首席执行官。

摘要:在这个演讲中,我们将讨论社会对一个永远不会忘记、无法篡改的知识和历史存储的需求。在概述了这种设备的必要性之后,我们将描述 Arweave 解决相关问题的方法:通过点对点网络技术和机制设计来实现。最后,我们将讨论现实世界中的例子,说明 Arweave 是如何被用来减轻审查制度,并确保可以访问历史上已经不可改变的记录。

Abstract: In this talk we will discuss the societal needs for a store of knowledge and history that never forgets, and cannot be tampered with. After outlining the necessity for such a device, we will describe Arweave’s approach to solving the associated problems: through peer to peer networking technology and mechanism design. Finally, we will discuss real world examples of how the Arweave is being used to mitigate censorship, and ensure access to an immutable record of history, already.


感谢蓬岸1。的分享,这真是一则有趣的计算机小史!说到Arweave2,则是在其堆栈中使用了与之前讨论略有不同的组件。Arweave是一个试图永恒储人类存历史和知识的去中心化数据库。我们参考了区块链这一数据结构,创建了一个分布在诸多计算机之间的账本,再通过纵向扩展(scale up)该系统使之可以处理超大量信息,试图以此打造一个永不遗忘的档案馆。在这里,信息的副本将分散各地而非聚集在一处。

我们愿意将Arweave说成是某种程度上“站在了网际网络档案馆(Internet Archive)巨人的肩膀上”。毕竟,我们双方在储存信息元数据方面有着密切的合作——他们会将一些元数据储存在我们的账本内。当然,除了这些网际网络档案馆的元数据,Arweave还在堆栈顶部储存了一些其他的信息。那么,就让我们来进入Arweave的话题吧!

健忘的互联网

首先,我想谈谈Arweave的项目动机。大约三年半以前,我们在分析互联网自身结构时发现,互联网在从web 1.0到web 2.0的过渡中已经逐渐偏离其最初航道,驶向另一个与最初截然不同的使命。网络的最初的使命是成为一个全球分布的知识集合体,即互联网(Internet)。超链接可以让我们从一个文件跳到另一个文件,是网络革新力量的核心。当网络实现了远距离知识传输时,建立在此之上的网络基于的是人们对“假如知识可以深层次链接”的构想。此构想建立在Gopher 协议的基础之上, 基本实现了远距离且即刻的信息传输。当文档末尾的脚注可以链接相对应的另一个文档时,人们又接着设法令每个文档中的单个文本位(individual bits of text inside each document)能够链接至其他文档。这是一项影响深远的创新;不过, 此网络有一个根本的缺点,即“健忘”。除非我们能保持长时间有效的信息传送,不然,网络就不一定能正常运行。但人们没有意识到这整个机制的效率有多低下。

图一 98.4%的互联网数据会在20年内遗失

一些研究显示,我们分享在社交媒体上所有信息的大约35%都在其发布2年内遭受删改。只需20年,98.4%的数据都将有此遭遇。它们或是完全丢失,或是被修改到最初链接不再对应原初数据或原初迷因(meme)的程度。所谓的迷因,指的是理查德.道金斯(Richard Dawkins)口中“某一想法的基础版本”(the fundamental version of an idea)。

在人们已然依赖上了作为“人类知识储存中心”般的互联网的今天,“98.4%的链接在20年内断掉”意味着什么?今天,一种“丰富的时尚(abundant fashion)”总能令人们如尝得到各色信息且无需将它们存在脑内。毕竟,互联网协议强大且不切实际,足以完全改变我们和世界根本的交流方式——即便它本身只是个连细胞膜机制都没有的非生物。

若我们将今天的网络展示给某位生活在1800年左右的人,他可能会说:“哦,除却没有存档功能以外,互联网不就和图书馆的概念十分接近吗?”确实,互联网就像一幢超大型的,充满书籍资料的建筑物,只是其中的资料会定期遗失和更新。档案遗失是人类存档史上重复出现的一则老问题。人类储存知识的地点不仅会被火灾和洪水之类可怕的灾祸所破坏——例如亚历山大图书馆的大火;它还可能遭到军队的袭击,成为权力角逐的牺牲品。自从人们发现了控制信息的价值,档案馆就常常成为决战发生的地方。

或许,乔治.奥威尔(George Orwell)在1984年所说的:“掌握过去的人掌握未来。掌握现在的人掌握过去。”可以解释档案馆对人类文明来说弥足轻重的原因。当过去的权威解释者既能控制人们对现在的翻译,又能改变人们在未来的行动时,回顾过去的视角其实也在影响人们未来的行动。这也是我们建造Arweave这个能让人们在最短时间内互相连接的网络的原因。

图二 大火中的亚历山大图书馆

既然当今互联网已然跨越空间距离使人相连,Arweave就试图跨越时间的距离。我们在Arweave的基层(base layer)搭建出一个档案存储系统。当信息被存入时,系统自身拥有的可持续经济能让其近乎被永久储存,而去中心化技术和点对点网络则使数据能被备份在世界范围内两百多个国家中。基层协议之上,所有储存在Arweave内部的信息都可以在名为“Permaweb”的浏览器中被访问。用户只需在Arweave网关上选择该浏览器,搜索,就会得到一个业务流水凭证(Transaction ID),获得浏览相应数据的权限。网关也许会改变,但链接和凭证是不会改变的。这一切造就了一个近乎“永不遗忘任何信息的网络”。这也是“Permaweb”的字面意思。在《1984》出版的69周年纪念日上,我们首次运营了Permaweb。它所储存的第一份文件就是从网际网络档案馆(Internet Archive)上下载的一份影印版的《1984》。

这就是Arweave的理念,但它是如何被实现的?就像我刚提到的,区块链让全球范围内的数据得以被分散地复制。Arweave就是区块链影响力扩大的产物。

去中心化的全球数据复制

在2012年和2013年那阵子,我和我的现任同事们一度对区块链特别感兴趣。我们一面进行比特币挖矿,一面学习计算机科学,研究分布式系统。2017年,当我在进行一个和我博士学位相关的分散式操作系统项目时,“完整地进行档案存储”所面对的潜在威胁正日益增多。有一天,我和我的朋友突然意识到,在曾经被标榜为“自由之地”的西方世界,人们所创建的档案馆搞不好会以某种形式失去档案储存的完整性。好在与此同时,区块链技术和共识机制正在蓬勃发展中。

区块链分布及计算数据的方式刺激着人们的创造力。我们则是借鉴了这一点,即:当用户在网络上进行交易时,该交易将变作围绕在所有其他用户周围的“Gossip”,甚至会和整个网络都相关联。在这样的情形下,数据被写出,人们会就此交易为该网络带来的改变达成共识。此共识会被写进某一 “区块(block)”(即上述交易的一个集合体)中。持续如此这般后,我们就获得了一个关于数据的共识机制。这一分布式账本不存在任何一个独立的中心致命点。在比特币那样的网络中,对线下档案馆可能奏效的破坏模式是失效的。我们认为,这就是给历史创造一个尽量完整的,加密的,且能用数学证明其完整性的分布式账本所需要的东西。

问题是,比特币区块的大小也就一兆的样子——你只能把很小一部分数据储存在其中;而这会令单项交易的储存成本过高。一个仅储存400字节就可能花费30美元的系统显然不是储存大量历史一手资料的最佳选项。如果使用这样的系统,我们不太可能持续进行大量信息的储存。要解决这一问题,就得搞清楚这样成本高昂的储存系统成因为何。此外,即便账本中已经有大量信息储存,我们也需要思考如何适当地激励人们将信息储存得更久一些。

图三 Proof of Access工作机制

我们通过“访问证明(Proof of Access)”来确保大量数据被清晰简单地复制。比如,某比特币区块隶属于上一个区块,它拥有上一区块的“哈希(Hash)”——哈希嵌套在新建区块上,是块内数据的数字指纹。有了哈希,你就可以加密地使用数学,从头回溯并检查此区块链的完整性。至于创建新区块,则会用到所谓的“工作证明(Proof of work)”。创造新区块时,网络中所有结点和所有计算机都会通过运算去猜出一个随机数字,来看它们是否获得账本中所有的交易。这就像是一场竞赛。你会得到一个随机数及相应的指纹。这一指纹将被用于信息身份的验证。我们的想法是让矿机尽可能提高算力,直到任意一台矿机算中了某个符合条件的罕见数字,被允许向系统和网络申请新建区块,并获得相应比特币作为生产区块的奖励。

Arweave在此基础上稍作改进,使新区块不仅包括前一区块的数字指纹,还包括旧区块内的全部内容。为参与这场创建区块的比赛并获得奖励,旧区块被要求储存;而储存旧区块将迫使超大规模的数据复制在各处发生。现在,Arweave系统中已经有上千个节点。这使得旧区块内的所有信息都至少可被访问(或是在本地储存信息,或是从他人那里租用信息的访问权限)。毕竟,想参与挖矿,得到数据访问权限是必要的。而比特币区块生产所涉及到的以上种种,本质上都是有价值的信息储存。这一切信息都是有用的知识。

Arweave的数据储存资金

以上是Arweave技术层面的工作原理;其实,Arweave的经济原理也十分有趣。 我们并不进行那种为某一数据在特定时间内支付定量储存费的所谓的“基于合约的储存(Contract-based Storage)”。众所周知,当一份信息被委托给阿里巴巴(Alibaba)或亚马逊(Amazon)这样的公司,它们将在某段确定时间内收取该文件的储存费。而时间一到,合约失效,存储也就会中断。而在Arweave,任意被放进网络的信息都将被收取200年的信息储存费。这笔费用听起来很贵,实则不然——每兆字节仅花费大约0.5美分;这些利润会被我们用作信息储存的成本。

图四 可持续性存储的变形

如图四所示,我们得确保某不变量在任何时候都保持为真,即所谓的可持续存储的变形(Storage Sustainability Variant)。因此,对每个Blockweave(我们自创的数据结构)内的区块来说,所有结点在创造区块过程中所得的奖励之和必需大于等于网络中所有数据的储存成本。这笔费用会受数据储存时间,数据内容,以及区块生命周期内千兆字节(Gigabyte for a block period)的影响。总而言之,Arweave需要确保每个时间戳上所有节点所获的奖励总和高于在现阶段网络内储存相应数量信息的市价,再从本金所获的利息中支出这笔储存费。

我们不是在典型的金融意义上或是在美元这样的货币意义上获取利益,而是通过递增的本金储存购买力获取利益。图五是过去40年内递减的储存成本的对数尺度。如图所示,储存信息的成本持续递减,平均每年下降30.5%左右。这意味着假如你在元年将数据放进网络并支付往后200年的数据储存费,那么在第一年后,该本金的存购买力会增加至260年。第二年后,这个数字就会变成338。事实上,只要信息储存成本保持在每年降低0.5% 左右,本金对数据储存的购买力就会逐年增加。但你可能还会疑惑:虽然过去50年间信息储存的成本按照30.5%的平均量逐年递减,但是这种趋势应该不是永久的吧?那么,就让我们从“数据密度”和“数据可靠性”两方面分析我们在这条曲线中所处的位置。

图五 1980年至今储存成本对数尺度
图六 个人数据储存购买力

我们原计划使系统数据密度达到每立方厘米1×10的12或13次方字节。统计表明,这一数字现已达到了1×10的25次方字节。而理论上我们能达到的最大数据密度大约为每立方厘米1×10的68次方字节。因此,我们在数据密度方面还有很长的路要走——如果我们继续以为每年30.5%的速度增加数据密度,就会需要433年来达成整套计划。而除数据密度外,数据可靠性的提高也能从本质上提高我们的储存效率。这样开来,这整套模式很可能持续上千年。

实践中的Arweave

图七 Sputnik发文事件的相关报导

我们所谓的“永久”指的是任何人类生命或类人类生命可以持续的时间。我们相信,未来,在控制论系统之下,AI会代替人类,而他们对数据储一定会有强烈的兴趣。我们积极进行上述一切技术和经济领域实践的动机就在于关闭OleVariant数据的记忆空洞(memory hole),增加删改历史记录行为的难度。

例如,2018年12月份,在刻赤海峡俄罗斯和乌克兰国境交界处,几艘俄罗斯船只在穿越海峡时扣押了乌克兰士兵和船员。有趣的是,针对此事件,俄罗斯官方喉舌之一——出版商Sputnik,却发布了一篇亲乌克兰的文章。虽然文章只在线上出现了14分钟,但只因有人及时把此篇文章存入Arweave,于是文章一经删除,警报系统就被触发,反而让人们纷纷注意到此事,甚至于一些英国大报也开始对此进行报导。毕竟,这是一则政府企图扭转自己针对世界地缘政治重要事件声明的案例。

在这则案例中,早在用户按下按钮,向网络提交这篇文章时,它就已经在世界范围内被复制,以至于强迫所有拥有此信息副本的人删除信息是不可能的。尤其值得一提的是,一旦系统内的数据被埋藏在网Arweave网络的大量区块中,按照我之前提及Arweave工作机制,任何试图删改数据的行为都需要付出极大的计算成本。与此同时,Arweave系统本身可持续的强大经济会支持系统近乎无限期地受数据复制的激励。现在,你依然可以浏览这篇曾被企图删除的文章,也可以通过哈希来验证它的完整性。虽然Sputnik的发文只是两年前的事,但是也许20年或者200年后,当我们可以自信地说“这份信息从没被修改过”时,一切都将变得更有价值。

图八 Arweave所储存的意大利政府新闻稿

除俄罗斯政府以外,意大利政府所发表的大量新闻稿也被储存在了Arweave网络之中。虽然政府在换届之后将这些新闻稿从官方网站上移除;但是,如你所见,Arweave收藏了这些信息。图八顶部的“Arweave.net”就是Arweave的网关之一。它可以被替换为任何其他的网关ID或URL,然后生成一条业务流水凭证(Transaction ID)——图中“QW”开头的那一串字符,也就是我之前提到的指纹。通过它,用户可以通过Arweave网络分布在数十个国家的数百个结点访问此信息。这样一来,信息本身就像是被锁在了历史之中,它既不会移动,又是可验证的。这样的例子在Arweave网络中不胜枚举。在Arweave Permaweb名为“Bit-search”的搜索引擎上,你可以搜寻任何已被写入Arweave的内容。总而言之,Arweave是一个档案馆,或者说是一个图书馆。它永不遗忘一切,且正被越来越多的信息填满。

当我们开始Arweave这个项目的时候,我们担心未来会有大约二十分之一的,关于“过去”的信息将变得不可信。如今,Arweave的正式运营已经过去了两年半,而自从我们开始规划这个项目以来已经过去了三年半。我们认为,20年后的个人用户很可能会生活在比如今更不稳定的信息世界当中。虽然政府未必是这种不稳定的始作俑者,但如今看来,政府正日益极端地对跨境互联网服务商进行管制。因此,我们认为人们迫切需要Arweave这样的档案馆。

至于网际网络档案馆(Internet Archives),则是我们的伙伴。我们合作将数百万份信息存档,以获得可被验证的时间戳。任意被储存在网际网络档案馆(Internet Archive)中的文件都可以依据Arweave内部相应的时间戳被核验来源。即,被储存在Arweave网络中的并非信息本身,而是元数据和数字指纹。我们并非复制储存在网际网络档案馆中的文档,而是去对那些在档案馆中所储存的数据进行所谓的“真实性验证(fact checks)”。只不过,目前我们还不能核验所有数据,毕竟还有大量信息的储存费无人支付;但我相信,未来总会有人乐意为它们付费的。

总而言之,那些挑选出“真相”的人也得确认这些真相的真实性。档案馆的义务就在于尽可能中立地进行信息储存。我觉得,储存信息,让信息在被找回的同时尽量免于语境和偏见对信息呈现的影响是一个非常危险的游戏。虽然如此,人们对中立档案馆的需求正在增加,而我也因此为我们目前为止的尝试和收获感到欣慰。

谢谢大家的耐心和关注,我很期待接下来的会议内容。


Panel 2 网际网络档案馆

Q&A 回顾

演讲嘉宾: 周蓬岸,山姆.威廉姆斯[Sam Williams],林亦凌[Elaine Lin]
评述:刘怿斯,阎晗
主持人: 顾紫翚

刘怿斯:感谢三位嘉宾和我们分享他们正在做的事。今天我们讨论的主题是档案存储,这和之前场次的主题有所不同。毕竟,这意味着艺术要以字节的形式存储在数据库当中。或许让我们的几位主讲嘉宾展开来聊一聊吧。首先,虽然我不是很确定,但我想问一个问题。即,各位讲者是如何数字化,或者说将一切艺术作品分门别类,创造数据库的呢?如何为艺术作品制作索引?

林亦凌:我觉得这个问题是抛给我的。我们的数据库及其所依据的元数据10年之前就已经被着手构建了。这一切是开始于一种数字化的需求。

当时,遍览图书系统和档案系统的我们想,现存的一切档案真的能成为艺术史研究的现成材料吗?我们如何构建一套基于现存图书馆系统的,能服务于我们的元数据?我的意思是,一套真正可读的,将材料看作条目(item level)对其进行描述的元数据。众所周知,如今常见的线下的档案馆中,材料往往是以文件夹(folder level)或合集(collection level)为单位被收录的。这种机制仅允许访问者浅尝材料,或是让亲自来访的,有紧急学术目的的学者查阅到相应信息。而“以分享为目的档案保存”则要求我们尽可能完备地描述所有材料。

在亚洲艺术文献库(AAA)中,每份照片档案都有内容性的描述。这不仅是为了令访问者更好地理解材料,还是为了达成我们“在存档的同时使第一手资料可被访问”的使命。毕竟,对于研究者来说,去使用,甚至去拥有某些研究材料是非常困难的。我们的动机就是尽可能使一切材料可视化(visible)。基于此,数字化是一种很好的档案储存方式。

顾紫翚:好,现场有什么问题?

阎晗:我想问一个比较直接的问题。今天,我们有网际网络档案馆(Internet archive),有Arweave,也有亚洲艺术文献库(AAA)对不对?但是刚才刘怿斯也提到,我好像不太能想象把艺术作品数字化储存后它们的未来会是什么样。的确,今天的世界存在着大量的数字艺术,但是这跟诸位所做的历史性的文件储存截然不同。据我所知,Sam其实在和一些艺术家合作,希望艺术作品能够永远存在于他们网络。但在我看来,一幅画的短期存在和永远存在是很不一样的。特别是,“永远存在“这件事似乎本身就改变了艺术的性质。对此,我想听听Sam跟Elaine的看法。

Sam Williams:很有趣的问题。我的关注点仅限于电脑科学,所以可提供的观点有限。但在我看来,这个问题多少和 “赛博空间,尤其是永久性的赛博空间如何影响艺术品的所有权”这一问题相关。

在去中心化的线上世界,许多人正进行所谓的“非同质化通证”(Non-Fungible Tokens)实验,这个实验和本身就是关于日益数字化权益(asset)所有权的。在Arweave上,无论是png格式文件还是其他图片都是永远开放的。你可以创建一个能够追溯某一权益(asset)所有权的非同质化通证。这似乎触及了互联网如何影响人类社会的问题,尤其是,互联网似乎与人类本身处理事物稀缺性和动态性的策略相左。

众所周知,赛博空间是充满数据复制的。只要将具体信息复制并对所有人完全开放,就能在某种程度上达到免费的效果。试想,一份传统艺术作品被上传到Arweave后,它可能就不再属于任何人了。毕竟,没有人可以在它被上传之后更改其相关信息。虽然这些艺术作品都有作者,但其实,作者会从作品所连接的参考条目中被隐去,也会无从控制与作品相对应的数据。而我们作为社会的一部分,正在进行非同质化通证的试验,将稀缺性带到赛博空间中。

在过去的历史中,我们也许可以通过被储存的信息副本为人们提供无限访问某一具体经验的权限,因为网络是被设法创造成人们能永远免费浏览的东西。但我认为,我们可以在完全不限制人们对艺术作品访问权限的同时,玩一个基于“人们对稀缺性关系的认识”的游戏。即,设法通过让人们觉得“他们拥有某物”来创造价值,再把这些价值用于支付艺术家的创作薪资。这就像是建造一个对所有人免费开放的博物馆,所有人都能浏览收录其中的艺术作品,但只有一个人可以拥有它。这样一来,艺术作品的所有权就能激励艺术创作,毕竟到时候,创作会变成有偿的。当然,这种情况可能只会在人人都能访问的公共区域内发生。

林亦凌:我想就刚刚Sam的演讲及其回应做一些补充。我认为他提到的 “去中心化如何能成为一种永远保存信息的策略”这一部分非常有趣。其实,我有一个问题想要问Sam:你们如何筛选材料,将其存入Arweave?

至于现场观众刚刚提出的问题,我的回应是:我认为AAA的关注点在于归档(documentation)而非艺术品(artwork)。我们关注研究和写作中可能用到的第一手图片和文字资料如何在线上被分享,而数字化是保证这些材料被可循环利用的一种手段。

档案的“永久性”我们也会考虑到。我们也在和类似Arweave的网际网络档案馆合作,研究如何存档。如今的数字平台日新月异,就连我们的网站也已经有了两个版本,可见有多少信息已经被修改和阅读了。当AAA的数字化存在有了新面貌,我们面对的问题就是如何保持这种数字化存在。我们的老版网站可能在网际网络档案馆(Internet Archive)上能被搜到。它记录了我们使命的变更,以及我们的档案馆如何被保存在其他档案馆之中。但总而言之,我不能简单清晰地回答这位观众的提问,我只能说,我认为这是一件随AAA的发展一同被持续探索着的事情。

顾紫翚:谢谢两位的回应!现场还有人想提问吗?我们可以再收集一个问题。

周蓬岸:我有一个问题想问远程连线的两位。我发现,当我们用档案馆(Archive)储存相关资料时,我们不仅要把它存下来,还要保持它的可用性。比如,我的古董电脑博物馆,包括internet Archive的一些模拟器,其实是很讨巧的——我们在用电脑屏幕来模拟电脑屏幕。这样的模拟确实蛮复原的,只是一些资材料的质感没有办法很好地被电脑屏幕复现。

举个例子。我在查询1996年上海传真艺术展时正好在AAA上找到了相关资料。但随后,我发现在电脑上查看这些相关资料是找不到传真类感觉的。不得已,我去淘了一个二手的传真机,然后把它打把里面的东西打出来看,我才说:“原来这个东西是这样的”。但可能在更远的未来,连二手传真机都不容易买到了。到那时候,我们要用怎样的努力,或是怎样的想象力,去保持档案的质感呢?

林亦凌:谢谢你的提问,我觉得这是一个非常好的问题。我们做存档(Archiving)时一直强调归档,但你刚说的例子很好,就是说,对于作为文档的艺术行为,我们如何去保留它的质感(texture)?

老实说,事物的质感是我们没有办法还原的。但作为一个储存信息的档案馆,我们起码可以对策展人或是像你这样的研究员提供一些原始资料,一些语境和脉络,好让大家可以利用这些资料进行研究和创作。这样说来,我们在意的是创作的可持续性,而不是完全把一件事物捕捉(capture)下来。虽然将一些非常身体性、时间性或者是有空间的限制的艺术作品存档十分困难。但我们至少可以把那些原始的材料保存和记录下来。这种记录或许是通过照片的形式,它可能是第一手资料,又或者因为媒介而变成二手资料,但无论如何,这都是当下的我们对它存在的一个记录。而如果我们连这一步都没有做,之后的研究就非常难做了。

顾紫翚:Sam, 你对此有什么看法吗?

Sam Williams:在我看来,尝试在赛博空间储存物理世界中的某物基本上都会遇到档案不能被“完美再现”的问题。不同于AAA,Arweave所关注的是如何更好地抓取(catching)赛博空间中的原始素材,即那些一开始就发生在赛博空间内发生的事物。

我们相信,人类的日常生活会日益从线下转移到线上,科技的进步只会持续进行下去。如今,虚拟现实越来越将我们的感知(senses)和依附于网络存在的机器合而为一。即,我们正日益令我们的大脑沉入机器中。而世界就在机器中被重现。这个趋势从上世纪六十年代就开始了。如今,我们目睹的脑机接口技术似乎也证实了人类世界日益加剧的机器化。我们沉入机器的日常时间是日益增多的。

回看计算机历史,最初的计算机是超大型的,像一幢建筑物一样,当时的“分享”可能是以整个组织为单位进行;但在稍后出现的台式电脑上,“分享”就变成以家庭为单位;在到后来的手提电脑,智能手机,分享的单位越变越小。如今,赛博空间似乎已经变成越来越多事物的第一现场。就像我刚提到的俄罗斯政府的宣传案例,这整个案例就完全发生在线上。我认为,去捕获这些现场,并将其在元数据中通过适当的时间戳来永久化是很有意思的。这样一来,未来世代的人就可以了解到“当时”正发生着什么。这就是我们对这件事的看法。

当然,我完全可以体会你们要在线上世界完美处理线下材料所面对的困难。毕竟,在完全不改变其原初质感,又或是酌情调整其质感的情况下,将某一艺术作品复现在赛博空间需要我们对艺术作品进行很深的研究。

至于如何选择值得存档的文件这一问题,我相对简单的回答就是:我们允许任何人有偿或无偿地将其认为有价值的数据储存在我们的系统内。作为一个组织,我们运行了大量的程序去将互联网上一切看起来有争议的东西聚集在一起。这是因为,这些有争议的内容常常面临被删改的危险。而Arweave希望能储存这些信息,令未来的历史学家得以回溯当时的状况,弄清楚争议双方的来龙去脉。

顾紫翚:今天我们本来是准备在9:30结束的,但是现在已经9:55了。那么我们第五届年会的第二场就到此为止。非常感谢蓬岸,感谢 Sam,感谢Elaine。谢谢各位。

Sam Willliams:谢谢各位的邀请,这是一次精彩的对话,非常感谢。

黄孙权:来年见或是明天见!

阿里云未经用户同意泄露用户信息被浙江省通信管理局责令整改

https://landian.vip/archives/90301.html?utm_sources=ourl.co&utm_medium=social&utm_campaign=none

 

 微博有用户发布截图显示,阿里云计算有限公司因未经用户同意擅自泄露用户个人信息被浙江省通管局责令整改。

流传截图是浙江省通信管理局回复某用户的投诉函,在投诉函里浙江省通管局确认阿里云公司确实泄露用户信息。

阿里云相关行为违反我国网络安全法,为此浙江省通信管理局依据网络安全法相关规定责令阿里云公司进行改正。

阿里云回应称有员工违反公司纪律:

针对以上信息阿里云公司也发布回应 , 阿里云表示根据自查该投诉事件应为2019双 11 期间有员工违规导致投诉。

当时阿里云电话销售员工违反公司纪律,利用工作便利私下获取客户联系方式并透露给分销商员工引起客户投诉。

对此阿里云表示公司严禁员工向第三方公司泄露用户个人注册信息,已根据公司相关制度对该事件进行严肃处理。

同时阿里云按照浙江省通管局要求进行积极整改,对人员管理层面上的不足进行强化改进、感谢大家的批评监督。

浙江省通管局2021第483号函:

阿里云未经用户同意泄露用户信息被浙江省通信管理局责令整改

 

危险镌刻 分析苹果公司在六个地区镌刻服务的内容审查


公民实验室调查苹果iPhone、iPad等设备刻字的客户设置的过滤器,发现苹果有一个广泛的审查词清单,不仅在大陆,在香港和台湾也是如此。 苹果公司回应称其系统 "确保尊重当地法律和习俗" --- 李其 Lizzi

消逝中的在线数据

https://www.huxiu.com/article/449207.html?f=rss 

距离我个人最近的在线数据消失恐怕是虾米的下架了,上万首收藏的歌曲瞬间归零。这也让我想到多年前使用的MSN退出中国后,写了几年的博客日志也就随即蒸发了。如今各种在线存储服务频出,用户如何能够长久保存各种资料和数据成为了一个重要的问题,但实际上,开发商并不就一个关乎永久的问题给出永久的答案。


本文来自微信公众号:利维坦(ID:liweitan2014),作者:Chris Baraniuk,头图来自:《我是谁:没有绝对安全的系统》剧照


如果你的数字数据——电子邮件、短信、照片和文档——很快就会在一系列毁灭性的电风暴中消失,你会如何竭力保住它们?


这就是苏珊·多诺万(Susan Donovan)所设想的未来的灾难,她是一名高中教师,也是一名科幻作家,常驻纽约。在她自行出版的小说《纽约市地理学》(New York Hypogeographies)中,她描述了这样一个未来:2250年,由于电力干扰,海量数据遭到删除。在随后的几年里,考古学家们在被毁坏的城市公寓中遍寻21世纪初的文物。


她说:“我在想,‘如果所有的数码产品都不见了,这会给人们带来怎样的变化?’”


在她的故事中,灾难性的数据丢失并不是世界末日,但极具破坏性。它促使人们改变保存重要数据的方式。多诺万写道,电风暴带来了印刷业的复兴。但人们也得思考如何储存那些无法打印的东西,比如增强现实游戏。


数据从来都不是完全安全的。试想一下被烧毁的亚历山大图书馆——毁于一场大火可能是你听说过它的唯一原因。数字数据不会在巨大的火灾中消失,却会消失于一次单击,或随着时间推移,消失于存储介质无声的悄然退化中。


今天,我们已经习惯了这种删除。这样的例子不胜枚举——2019年MySpace个人资料消失便是轰动一时的例子之一。多年来许多陆续关闭的谷歌服务也囊括其中。此外,还有一些在线数据存储公司,为人们的数据提供安全保障。但讽刺的是,他们有时会指定删除某些数据。




© Yoors


在其他情况下,这些服务会长时间运行。但用户可能会丢失登录所需的详细信息。或甚至忘记了他们有过账号。他们可能再也无法像在阁楼里找到一鞋盒的旧信件那样,找到存储在那里的数据了。


多诺万之所以对“转瞬即逝的”数字数据感兴趣,原因在于她的个人经历。她在大学专修数学,有多份手写笔记。她笑着说:“有一次我开始记电子笔记,之后却找不到了。”


上世纪90年代末,她还写过在线日记。现在日记没了。她从事的创意项目也不再完好地保存在网络上。当她创造这些数据时,还以为自己在创造可以长久存在的东西。就像可以无限重放的电影那样。但现在,她对什么是数字数据及其可能持续多久的理解已经改变了。


她说:“这更像是我写了一出戏,你看了,但你得到的只有回忆。”


由于我们祖先刻在建筑物墙壁上的石碑、古书和启示经久不衰,我们的文化中存在着一种偏见,即认为文字是历久弥坚的。我们经常引用几个世纪前的评论,因为有人把它们写下来了,并保存着完好的副本。但在数码形态下,文字只不过是屏幕上光的投射。只要灯一灭,可能就消失不见了。


但是,也有一些在线数据能存在很长时间。有几个网站至少维持了30年。数据会继续存在,即使我们并不想这样。“被遗忘的权利”这样的说法由此诞生。正如科技作家、BBC网络产品经理西蒙·皮特(Simon Pitt)在科技出版物《零一》(OneZero)中所说,“现实是,你想要的东西会消失,而你不想要的则会永远存在。”


杰森·斯科特(Jason Scott)想要调整这种平衡。他管理着档案小组,这个小组致力于保存数据,特别是那些被关闭的网站的数据。


他主持了数十项活动,及时捕捉和存储了信息。但想保存一切往往是不可能的。当MySpace意外删除了约5000万首歌曲时,一个匿名学术团体给了档案小组他们之前备份的近50万首歌曲的合集。


“对有些乐队来说,MySpace是他们存在的唯一证明,”斯科特说,“整个文化图书馆都被毁了。”MySpace为当时的数据丢失事件道歉。


斯科特说:“一旦你删除了这些内容,它就完全消失了,”他解释了主动保护数据的重要性。他还认为,在某种程度上,社会已经无意识地进入这种境况:“我们没想到网络世界会变得如此重要。”


现在应该清楚的是,数字数据是不稳定的。但如何抑制它容易消失的特性呢?


斯科特说,他认为应该对相关公司有法律或监管要求,要允许人们在在线服务关闭后的一段时间内(比如5年)仍可恢复自己的数据。在那段时间内,任何想要自己信息的人都可以进行下载,或者至少自费购买一张CD拷贝,让相关公司寄给他们。


他补充说,少数公司树立了良好的榜样。斯科特提到了Glitch,这是一款二维多人在线游戏,2012年,自其推出一年多后,就从网上移除了。斯科特说,从数据的角度来看,它的清算过程“基本上是完美的”,其他人也赞扬了这样的做法:该游戏的开发者充分理解玩家的失望情绪,并给了他们足够的机会在关闭之前从公司的服务器下载数据。


一些游戏的代码甚至被公开了,粉丝们开发的多个Glitch翻版在此后的几年里出现了。


不过,应该强制相关公司效仿这种做法吗?


MyData(译者注:一家国际非盈利组织,致力于建立一个公平、可持续和繁荣的数字社会)的泰穆罗普南(Teemu Ropponen)认为:“我们应该拥有实时权限,比如可以要求删除、下载或迁移数据——将数据从一个源传输到另一个源。”


他和同事们正在开发一种系统,旨在让人们更容易地在不同服务项目或机构之间转存有关自己的重要数据,如家庭史或简历。


罗普南认为,欧盟内部有将这种数据迁移写入法律的尝试。但还有很长的路要走。


即使技术和法规已经到位,但这并不意味着保存数据这件事就会一夜之间变得容易。我们的数据太多了,实在难以捉摸。


大约150年前,给家庭成员拍照是一种奢侈,只有社会中最富有的人才能享受。几十年来或多或少都是如此。即使技术越来越普及,一次性拍很多照片也不便宜。照片因此成为珍贵的东西。如今,智能手机的拍照功能意味着人们每年可以拍摄成百上千张照片,拍照彷佛是第二天性。


“我的孩子们或孙子们会怎么处理我手机里的400张宠物照片?”内布拉斯加大学林肯分校(the University of Nebraska-Lincoln)的保罗·罗伊斯特说,“这对他们意味着什么?”


罗伊斯特认为,保存我们所有的数据不一定对我们的后代有多大用处。他不同意斯科特和罗普南的“法律才是答案”的说法。他说,政府和立法者往往在技术相关的问题上落后,有时并不了解他们意图监管的体系。


相反,人们应该养成选择和保存重要数据的习惯。他说,“我们应该专门空出一年中的某一天——作为数据保护日,来梳理自己的数据。”


斯科特还建议我们应该思考自己真正想要保留的东西有哪些,以防它们被删除。


“没有人认为这些数据是必须不惜一切代价要保存的东西,它只是数据而已,”他说,“如果这些数据是书面的,我会打印出来。”


不过,还有另一种选择。芬兰东南应用科学大学(South-Eastern Finland University of Applied Sciences)的米娅科索宁(Miia Kosonen)和同事一直致力于解决档案馆和国家机构的数字数据存储问题。


她说:“我们转码了芬兰最大报纸赫尔辛基日报(Helsingin Sanomat)前主编的20多万封旧邮件。” 这说的是一个Digitalia(译者注:一个西班牙语数据库)主持下的数字数据保存试点项目。转码后的电子邮件后来被储存在一个数字档案中。


众所周知,美国国会图书馆(US Library of Congress)有一个推特数字档案,不过它已经停止记录每一条公开的推文,开始“有选择性地”保存它们。


公共机构能代表我们做一些数字数据的整理和保存工作吗?如果可以的话,我们就有可能向他们提交家族史和照片等信息,以便保存和将来进行查阅。


科索宁说,此类项目自然需要资金,这些钱可能来自公众。公共机构也更倾向于保留那些有重大文化或历史意义的信息。


这场讨论的核心很简单:我们很难知道——当下的我们或我们的后代在未来真正重视的是什么。


档案或监管干预可以在某种程度上解决数据保存的短暂性。但在某种程度上,我们可能永远都需要与这种短暂性共处。数字数据对于日常生活来说实在太方便了,我们几乎没有理由去尝试存储所有的东西。


保不保存完全看个人动机。现在,我们决定,要么尽力去保存或者不保存这些数据。是真正意义上的保存。不仅仅是存储在手边的硬盘或云存储设备上。我们还可以备份驱动器或更永久的介质,并附上如何长期存储的说明。


这听起来像是一个十分无聊枯燥的行为,但它也可以很有趣。可能只需一场文化运动来激励我们前进。


在音乐流媒体时代,许多发烧友仍坚持买黑胶唱片。书迷们仍会大费周章地获取他们最爱的作者的新作印刷本。也许我们需要保护主义者发动一场非数字运动。他们致力于重新制作实体相册。他们不厌其烦地手写笔记或信件。这些东西最终可能比任何数字化的东西都更容易保存,数字化的东西可能永远都要求你去信任一个由他人建立的系统,或者一个他人所有的服务机构。


正如多诺万所说,“如果某些东西很宝贵,那么我认为,把它留在别人手里就很危险。”


原文/www.bbc.com/future/article/20210715-the-online-data-thats-being-deleted



从端点星案看GitHub上身份泄漏的危险程度


482天的等待终于有了结果,蔡伟和陈玫都是一年三个月,加上指定监视居住实际是一年四个月,法官问我满不满意,后天人就出来了,现在来问我,谈不上满不满意,孩子的人生已然这样,只希望他能健健康康回家。---

https://github.com/fuck-xuexiqiangguo/Fuck-XueXiQiangGuo/issues/580

作者:E

在2049bbs上,小二这个ID最后活跃的时间是4月14号,2049bbs上的其他用户原以为这是普通的一天,在此之前,小二还发过一个帖子《貌似昨天有人批量注册账号》并且担心“希望不要有什么坏事发生”,但众人并没有特别重视这个帖子,因为2049bbs是海外论坛,话题多与政治相关,且立场多是批判政府,自然少不了来自政府的“特殊关怀”。过了几天,端点星案的消息逐渐传到了2049,端点星的三位相关人员陈玫蔡伟小唐他们在4月19号突然失联,亲朋好友经过多番打听才知道他们被北京警方拘押,但具体拘押原因并没有透露,最开始大家只是怀疑端点星案的里蔡伟就是2049bbs的站长,但谁也没有直接直接证据。大家只能默默等待。几天以后,小二ID的沉默和各个方面的证据都不可避免证实了这个不幸消息,而大家也开始更多了解网络背后真实的小二。

后来我们才慢慢知道原来2049bbs的站长小二,不但创立了2049bbs以提供给所有人一个可以自由表达想法的论坛,还在2018年1月和陈玫一起在Github创建了端点星项目,目的是通过备份国内平台被删除的文章和言论来对抗网络审查。端点星项目从运营以来备份了许多国内被严格审查的话题,囊括关于女性平权的高校性骚扰,北大马会学生岳昕事件,被导师压迫导致自杀的陶崇园,以及北京驱逐低端人口事件等。端点星备份的文章远不止这些被打压的热门话题,还包含各式各样的被删除文章。端点星的备份计划不论政治立场,甚至还包括了胡锡进的文章,《管控舆论贻害无穷》,旨在于全面保留被抹去的声音。到今年年初新冠肺炎疫情在国内大爆发,新闻报道被删除的频率短期内达到一个峰值,而端点星项目亦马不停蹄的备份了100多份疫情相关报道,这些至今可以在Github平台上找到。

在这场意外爆发的疫情里,政府控制舆论删除新闻报道的力度空前,像极了在切尔诺贝利事件中的苏联,“乌克兰第一副总理 Konstantinl・I・Massik 曾这样愤愤不平地总结事故发生之初苏联政府的对策:大体上中央政府所采取的政策包括:首先是不措一切代价平息公众舆论;其次,为政府、各部及各部门进行开脱;第三,把损失的补偿减少到最低限度;最后是掩盖放射性对公共健康威胁的严重性。” 这些出自《谎言与泡沫的代价》,这篇文章也在国内被删除并且被端点星项目保留在Github平台。 而疫情爆发最后的结果竟然是公然贪腐的红十字会没有被问责,公然隐瞒疫情的官员没有被问责,而备份新闻报道的人却被投入了监狱。这是一个何其荒诞的社会!

端点星案的荒诞还远不止于此,陈玫蔡伟小唐被捕后,北京警方拒绝透露三人是否被捕消息,三人在中国的首都貌似被强盗绑票,直到4月23号,蔡伟小唐的家属才收到警方信息确认两人被捕的事实,而直到5月22日,在陈玫被北京警方带走32天后,家属终于收到陈玫被拘留的通知,尽管陈玫家属曾多次联系北京警方,但警方却声称陈玫地址有误。 然而,还有更不可思议的事情,将近100天过去后,他们家属聘请的律师们居然一直没有机会见到他们的当事人,并且官方执意为陈玫蔡伟委派官方律师,公然变相剥夺两人的辩护权。政府官方种种不合常理也公然违法的行为证明套在陈玫蔡伟头上的口袋罪,“寻衅滋事罪”,就是官方主导的莫须有罪名!黑箱操作的程序,莫须有的口袋罪,警察国家里的秘密审判,冷血的维稳机器正从两位良知青年身上无情碾过。鲜血慢慢从他们身上慢慢流出,流向了2049bbs,流向了端点星项目,流向了保留真相的净土。

他们的血不会白流,他们使用的去中心化的备份方式让政府再也无法肆意抹杀真相。这些真相不仅永远会保留在互联网上,而且会借助不同的平台慢慢扩散出去。 在GitHub上,一个fork的按钮就可以把端点星项目的内容在复制一遍,并且不需要经过任何人的同意。 到现在端点星项目已经被直接复制了298次,而通过其他帐号拷贝的次数无法统计。端点星项目上的"no more 404"已经是任何人都无法改变的事实。不仅如此,就如阿西莫夫的基地中端点星成为反抗的火种,陈玫蔡伟的端点星项目启发更多青年加入反抗言论审查的队伍,最近就有团队在GitHub上创建了有类似端点星的duty-machine项目,而海外的中文论坛网站,比如matters,品葱,也早已开始使用去中心化的方式在互联网上传播和备份自由信息。我相信在未来去中心化的信息传播方式会如雨后春笋般不断涌现,而企图在互联网上删除抹杀言论的努力不会轻易得逞。端点星项目点燃起的一点火光,此时此刻就在无声无息的传播到互联网的各个角落。

对于一个社会,公平正义比阳光更重要,而没有真相就不会有公平正义。 谎言与黑暗总是相生相随。病毒肆虐固然扰乱了正常的社会生活,但没有真相则意味没有正义,没有正常生活可言。而更可怕的是总有人借用政府权力故意挡住阳光,散播谎言和黑暗。 像许许多多类似项目一样,端点星的目的本来在于保留原本就属于这个社会的记忆,却无意中阻止了有心散播谎言的人。在今天中国的政治舞台上,有位光着屁股跳舞的皇帝,他只想让人们保留官方设定的正确记忆,然而殊不知,记忆无关正确,只有真假之分,而真实的记忆总是不经意间戳破皇帝的新衣,所谓的亲自指挥也不过就是在掩耳盗铃。 我们也应该预料到,一位敢于当着所有人光着屁股跳舞的皇帝,必然会毫不忌惮动用公检法去打压所有质疑,包括任志强,许志永,许章润,陈秋实,方斌以及端点星案的陈玫蔡伟等。

有勇气有良心的知识分子在极权下逐渐凋零,今天我们仍然要面对这些惨淡的事实。我们也需知道这些知识份子被残酷打压的原因正是他们的所作所为让极权开始害怕,开始寝食难安。借用李向阳的一句台词:“封锁越来越紧,说明鬼子的末日就要到来了” 这也正是今日中国的真实写照。

“有点理想的青年为了一个更好一点的社会,多踏出了一小步,就要被砍去一条腿。” 踏出我的一小步,谨以此文献给那些被囚禁的良心犯!

https://matters.news/@huoguang/%E7%AB%AF%E7%82%B9%E6%98%9F%E6%A1%88-%E6%97%A0%E6%B3%95%E6%8A%B9%E6%9D%80%E7%9A%84%E8%AE%B0%E5%BF%86-bafyreicc5og35v2nsuv2njbzuu2haml3hlahptjmzut4o7kyc32slh43rq

对抗遗忘和篡改:笔记&阅读&写作工具

 https://twitter.com/sailfishcc1/status/1372448380077678597

聊聊现在一些工具的感受吧,主要讨论Roam,Obsidian,Notion,印象笔记,Logseq,RemNote,NotePlan,Bear,Craft和Draft这些笔记&阅读&写作工具

首先要区分工具的用途:笔记,写作和阅读工具。在现在的信息社会当中我们对于信息的加工步骤基本上可以抽象为:1. 从多个信息源输入信息 2. 对海量信息进行加工,也就是把书读薄的一个过程 3. 把整理后的信息进行输出(文字写作,或者讲给别人)。

这些步骤里边第一步对应的是笔记,第二步对应的是阅读,第三部分是写作。通过这几部分的分类,可以大概将这些工具进行分类,大家吐槽很多的印象笔记其实也不错,只是它定位是阅读软件,而不是笔记软件或者阅读软件,Evernote 引领的「Web Clipper」潮流,且搜索能力比较出众

Evernote:为了对抗遗忘,过度使用「Web…Clipper」,遇到一篇好的内容,一个好的Blog总是想到使用一键剪藏,想之后在读,但是大部分情况下,稍后就是「永不」,把Evernote作为阅读工具,和Pocket对比,会显得Evernote很重,把Evernote当做写作工具或者笔记工具,Evernote对于Markdown等支持的又不好


在《学习如何学习》中提到了发散思维和专注思维,《暗时间》中的「暗时间」和发散思维的含义也比较类似,但是有一个前提,就是在之前有专注力(这个比较难),当发散思维出现一些Idea之后快速的记录,这属于创作(或者写作)

Draft和@少楠 的新产品Flomo,很适合这种场景,所以我将Draft和Flomo归类为写作工具,这类工具有两个优点:快速记录,无压力写作,我对这类工具的期待是:1. 全平台原生应用  2.信息同步 3. 启动快速 4. 支持语音输入 5. 移动端便捷的键盘操作


笔记工具:笔记的作用有两个,1:帮助存储容易遗忘的信息 2.帮助我们将信息转化为知识 。笔记工具需要提供围绕思考的一整套流程与功能,比如大纲、双向链接、Markdown 语法等等,这些功能可以帮助用户加快自己的思考过程,满足用户的思考需求。-- 来源:现代数字笔记指南

 笔记工具的标准:Markdown是第一个里程碑,可以用一些简单的语法完成内容记录,双向链接是另外一个里程碑,双向链接既服务记录笔记的过程,又服务域写作的过程,双向链接的本质是更好的检索,所以我对笔记工具的要求是: 1. markdown 2. 双向链接 3. 大纲 4. 可以关联历史笔记的所有特性(未知)

阅读工具:阅读工具相对比较宽泛,可以是Kindle,可以是Ipad,可以是浏览器,或者是书籍,也可以是任何信息输入端,阅读工具的一些标准是: 1. 支持Highlight 2. 如果是电子阅读器的话支持导出

收藏:在阅读过程中很难避免遇到一些Reference,对于这些内容,很难抵抗收藏的诱惑,我推荐的一些应用是: 1. RainDrop 2. Devonthink 3. 国内的Cubox 这些资源可以作为书签,可以作为链接,也可以作为Web Achive保存,他们有丰富的分类和标签,以及良好的搜索,但是我建议只把他们当做收藏工具

写作工具:写作一般来源于创作和从笔记中进行提炼,所以从笔记中便捷的提取内容是很重要的,写作工具最好有沉浸的写作,丰富的输出格式,简洁的语法,支持LaTeX,表格等,所以我将Bear,IA Writer,Craft,Ulysses放到了写作笔记当中,当然,其中的一些应用不仅仅可以作为写作工具

写作过程:1. 想好主题 2. 使用大纲工具列好大纲 3. 利用笔记&Google&Devonthink填充内容+自己在过程中新的想法和总结。 写作内容中的图片最好使用图床,不要在分发内容到不同平台时使用其他平台上传

Roam:我只是试用了Roam,没有深入的试用,一些主观的感受,Roam引领了双向链接的潮流,也有很多粉丝,因为营收比较好,算是比较成功的社区了,Block Reference应该是Roam的Killer Feature,Roam也足够好用了,但是个人不推荐的原因是「贵」,还有一个原因是不是Local File。 虽然Roam也有导出功能,但是导出很慢,并且最近有一些消息说Roam社区删除了早期未付费用户的数据(待证实),这个Youtube中也有一些观点可以参考,当然,不可否认Roam是很好的工具,玉树老师猜测Roam最终是想做一个连通每个人第二大脑的超级知识网络,持续关注

如何学习:在《学习如何学习》中的学习方法大致是这三步: 1. 图文漫步 2. 专注学习 3. 主动回忆(考试&测试) 其中主动回忆是一个很重要的步骤,主动回忆可以是考试&测试,可以是讲给别人,也可以是利用闪卡回顾,或者是基于Daily Note进行回顾

结合我自己的情况,在一天当中,有很多小的东西需要输入,比如写代码的时候遇到的一个问题,一个线上问题记录,一个Blog的Highlight,或者是一张好看的图,这么多杂而乱的事情如何进行定期回顾,成为一个难点,我的想法: 1. 利用Daily Note 2. 长期的目标管理  

在面对很多小的点时,可以利用Daily Note把自己的信息做一次汇总,Daily Note页面是小的点的大纲或标题,然后每天(社畜很难实现),或者是每周对这一周的内容进行回顾,在回顾的时候通过看大纲让自己回想dvyk 知识点的内容,做到主动回忆的效果。Daily Note很多笔记应用都有了,从Roam,NotePlan,Logseq,或者是RemNote,都已经作为了标配的功能,次时代交互的Craft也有RoadMap来做这个功能

Obsidian重度使用过一段时间,但是还是没坚持下来,不是他不好,只是实在爱不起来了,虽然社区也挺活跃的,也是Local File,但是不是所见即所得,确实不太美观,类似Block Reference的实现也不太优雅,虽然我也是早期捐了50刀的supporter,但是现在算是一个停滞使用的状态

目前在用的是Logseq和RemNote,Logseq主要是用作笔记软件,RemNote反而变成了学习软件,Logseq的优点是Local File,大纲结构,因为起步比较晚,所以各种思想都比较好,目前社区还算比较不错,开发者人感觉也蛮好的 

 

     

使用AdGaurdHome搭建无污染DNS

 https://www.adgk.net/archives/135/

安装AdGaurdHome

第一步当然是先安装AdGaurdHome啦!
根据官方教程可以很快速的安装好

无污染DNS实现原理

使用境外DNS虽然可以实现DNS不被污染但是缺点也很明显那就是解析速度慢而且解析境内使用CDN的域名时很可能会将IP解析至境外影响上网体验。根据官方文档中的说明,我们可以将DNS上游配置写在一个单独的文件当中,那么只需要将已知的境内域名单独使用境内DNS解析其余未知域名全部使用境外DNS进行解析就可以保证解析的结果不被污染。

具体实现

dnsmasq-china-list项目提供了很多属于中国大陆的域名列表。但是由于格式不兼容无法在AdGaurdHome中使用,我们需要对其进行转换。
使用sed命令我们可以很方便将其转化为AdGaurdHome所支持的格式

sed -E "s#server=(\/.+\/)114\.114\.114\.114#[\1]${CHINADNS}#g"

具体脚本

#!/bin/bash
CHINADNS=223.5.5.5
LIST="$(dirname $0)/dnsrule.txt"
cat <<EOF > ${LIST}
tls://8.8.8.8
tls://8.8.4.4
EOF
curl -s https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf | sed -E "s#server=(\/.+\/)114\.114\.114\.114#[\1]${CHINADNS}#g" >> ${LIST}

将上面的内容保存为dnsrule.sh文件赋予可执行权限并运行就会在脚本所在的目录生成一个dnsrule.txt文件,然后在AdGaurdHome.yaml文件内的upstream_dns_file:后面填入dnsrule.txt文件的绝对路径,保存后重启AdGaurdHome就可以了。

当然由于这个项目更新频繁需要经常更新上游文件,这点可以通过contab定时脚本解决

 

瑞士官方公開揭穿中共黨媒又一次使用自卷法製造的假新聞


简介 

瑞士官方毫不留情,公開揭穿中共黨媒假借瑞士人名義製造的假新聞;新華社故意為假新聞設計三層僞裝;“瑞士生物學家” (Willison Edwards)真身竟然是遼寧撫順小夥。

臉書是台灣自找的「網路長城」


https://scheeinfo.substack.com/p/f23

适用于 Clubhouse 的 Quantumult X、Shadowrocket、Surge、Clash 规则

https://kejileida.net/3969

 

在中国国内使用 Clubhouse 经常会遇到各种让人困扰的问题,没有声音就是其中之一,这里便分享一个最新的适用于 Clubhouse 的 Quantumult X、Shadowrocket、Clash 、Surge 规则,可以有效解决在国内听 Clubhouse 没有声音或者频繁出现断连的情况。

iOS 一般更推荐使用 Quantumult X,相比 Shadowrocket 虽然学习成本要高,但具有更多的自定义功能,比如在代理 udp 流量方面,就比 Shadowrocket 更为强大。Surge 的价格及其昂贵,溢价太多,所以并不推荐使用,建议使用其他两款翻墙软件进行替代,如果非要使用,可以参考神机规则,自行修改补充 Clubhouse 的IP地址即可解决问题。

安卓系统推荐使用 Clash,需要编辑配置文件后导入,虽说比 v2rayNG 等一键导入即用的代理软件更复杂,但是对 udp 协议支持更为友好。使用 V2rayNG 可能只能让 Clubhouse IP 走直连规则比较好,目前没有测试 v2rayNG 软件下 Clubhouse 规则。v2rayNG 解决 Clubhouse 没有声音的最佳解决方案是换软件,使用 SagerNet,软件自带 Clubhouse 支持,Github 和 Google 商店下载地址都贴在了文末,可以自行下载使用。

如果是使用其他一键VPN软件来听 Clubhouse,可能只能等待开发者更新软件后才能解决没有声音的问题。

支持 Clubhouse 的 Quantulumt X 规则:

可以选择在 Quantulumt X 分流 – 引用 – 资源 处添加以下 Clubhouse.list:

https://raw.githubusercontent.com/lynkco01/Quantumult-X-Pure/main/Clubhouse.list

如果无法解析 GitHub 地址,也可以使用以下 Clubhouse.list:

https://cdn.jsdelivr.net/gh/lynkco01/Quantumult-X-Pure@main/Clubhouse.list

clubhouse-%E8%A7%84%E5%88%99-quantumult-x.jpg

除了单独添加分流规则,你也可以直接选择使用这个 Quantumult X 配置文件,此配置文件不包含广告屏蔽、重写等规则:

https://cdn.jsdelivr.net/gh/lynkco01/Quantumult-X-Pure@main/quantumultx.conf

设置好规则之后,还要面临两种情况,即:

  • 服务器节点不支持 udp :指定 Clubhouse.list 中的地址走直连
  • 服务器节点支持 udp :指定 Clubhouse.list 中的地址走代理

quantumult-x-%E6%94%AF%E6%8C%81-clubhouse-%E8%A7%84%E5%88%99.jpg

使用机场服务,可以在订阅链接后添加 #udp=1 ,开启代理服务器 udp 支持(需要机场支持)。

支持 Clubhouse 的 Shadowrocket 规则:

在 Shadowrocket 的配置一栏中选择添加配置,点击 App 右上角加号然后导入以下链接。

服务器节点不支持 udp 的情况:

https://raw.githubusercontent.com/lynkco01/shadowrocket/main/shadowrocket.conf

服务器节点支持 udp 的情况:

https://raw.githubusercontent.com/lynkco01/shadowrocket/main/shadowrocket%20udp.conf

导入后选择启用配置即可。

clubhouse-%E5%B0%8F%E7%81%AB%E7%AE%AD%E8%A7%84%E5%88%99.jpg

服务器节点不支持 udp,选择直连配置,即shadowrocket.conf ;服务器节点支持 udp,选择udp代理配置,即shadowrocket udp.conf ,并在 shadowrocket 设置中选择 UDP ,开启转发。

当然,你也可以选择手动添加 Clubhouse IP,如果是使用机场服务建议与机场主联系,了解服务器节点是否支持 udp。

支持 Clubhouse 的 Surge 规则:

苦于 Surge 售价过于昂贵,所以没有入手这款风评极佳的翻墙软件,也就没有办法维护支持 Clubhouse 的 Surge 规则,不过好在神机规则已经有 Clubhouse 的IP 列表了,参考上面 Quantumult X 和 Shadowrocket 的规则略作修改便可以顺利使用。使用 Surge 在代理服务器支持 udp 的情况下才能获得较好体验,如果代理节点不支持 udp ,依然会经常出现没有声音或者声音断断续续的各种问题。

神机规则的 Clubhouse IP list 地址:

https://raw.githubusercontent.com/DivineEngine/Profiles/master/Surge/Ruleset/Extra/Clubhouse.list

支持 Clubhouse 的 Clash 规则:

安卓系统可能就只有使用 Clash 来听 Clubhouse 有较好的体验,你可能需要在电脑上将代理服务器地址填入该配置文件。

Clash 配置文件地址:https://t.me/clubhouse996/133

下载到电脑上修改,再导入手机中,如果使用的是「机场服务」,建议联系机场客服获取 Clubhouse 支持。

clubhouse-clash-%E8%A7%84%E5%88%99.jpg

服务器节点不支持 udp 的情况下,选择直连;服务器节点支持 udp,选择代理(默认节点选择),或者手动指定代理服务器。

目前测试下来的情况,可能 Shadowsocks 协议对于 udp 的支持要好于 Trojan 和 V2ray 。

安卓用户如果不会手动修改 Clash 配置文件,可以直接使用 SagerNet,相比 V2rayNG更为强大,开源软件,对 Clubhouse 支持友好,直接导入服务器即可,无需额外设置即可解锁 Clubhouse。

SagerNet Google Play 地址:

https://play.google.com/store/apps/details?id=io.nekohasekai.sagernet

SagerNet Github 地址:

https://github.com/SagerNet/SagerNet/releases

下载对应安装包即可。

支持 UDP 可用于大陆地区优化 Clubhouse 声音的机场推荐

「机场代理服务」支持 udp 即可用于优化解锁 Clubhouse 的有 Boslife、GaCloud。

Boslife 机场目前仅部分服务节点支持解锁 Clubhouse,即日本02、04、06、08和台湾节点,个人测试,官方并未保证。

GaCloud 机场全服务节点均支持解锁 Clubhouse。

如果你的机场对 Clubhouse 支持友好,欢迎在此留言。

对应规则有任何问题可以在评论区留言反馈,也可以加入上面提到的 Clubhouse 大陆群寻求网友帮助。

如果你觉得本文对你有所帮助,欢迎转发、分享给你朋友。

安卓AdGuard与VPN共存的几种方法

本文链接:https://www.adgk.net/archives/52/

几个好用共存方法。

  • 需要 root 权限
  • 对所有 VPN 软件适用
  • 可随时关闭 AdGuard 或 VPN 软件
  1. 在 AdGuard 的设置>网络>过滤方式中选择本地 HTTP 代理并开启自动(需要根权限)注意:如果弹出 root 授权窗口请点击确认。
    IMG_20200812_024952.webp

  2. 在 AdGuard 内的应用管理>你的VPN软件名字找到通过 AdGuard 路由应用流量。并将其关闭。
    IMG_20200812_025412.webp

  3. 打开你的 VPN 软件即可。

  • 无需 root 权限
  • 需要代理软件支持在不开启VPN的情况下开启本地 socks4/​5 或 http 代理
  1. 在 AdGuard 内的应用管理>你的VPN软件名字找到通过 AdGuard 路由应用流量。并将其关闭。
    IMG_20200812_030452.webp

  2. 将代理软件设置为仅代理模式(在Clash中为关闭自动路由系统流量
    IMG_20200812_030636.webp

  3. 在 AdGuard 的设置>网络>代理中添加代理,代理主机统一为 127.0.0.1

软件名 默认协议 默认代理端口
Shadowsocks SOCKS5 1080
ShadowsocksRb SOCKS5 1080
Clash SOCKS5 7891
V2RayNG (1.4.0+) SOCKS5 10808
SagerNet SOCKS5 2080
Clash的实际端口以配置文件为准,这里的7891只是用的比较多的端口,2.1.1版本后可在覆写设置内修改端口
V2RayNG在1.4.0之后才支持仅代理模式请注意版本
SSR用户请使用支持仅代理模式的shadowsocksRbClashSagerNet

IMG_20200812_031129.webp

注意:AdGuard内的检查连接功能并不能作为判断代理是否工作的依据,请使用浏览器打开对应网页(如:谷歌搜索、维基百科)进行测试
注意:如果遇到谷歌全家桶不走代理的情况,请在AdGuard的应用管理将对应软件的通过AdGuard路由应用流量选项打开
  1. 使用无污染的DNS,防止因DNS污染导致无法正常访问网站
  • 可以在AdGuard内的设置>DNS>选择DNS服务器>添加自定义DNS服务器中填写解析结果没有被污染的DNS服务器,也可以在AdGuard内的设置>DNS>选择DNS服务器>推荐的DNS提供商中进行选择(当然这些DNS服务器均架设在境外,在中国大陆使用速度不佳)

  • 如果你使用的是Clash,那么可以在Clash中的设置>覆写(需要Clash版本2.1.1+)中启用内置的DNS服务器。
    Screenshot_20210726013320.jpg

    然后在AdGuard内的设置>DNS>选择DNS服务器>添加自定义DNS服务器中填写Clash的内置DNS服务器。
    Screenshot_20210726013402.jpg

版权属于:坂本dalao
本文链接:https://www.adgk.net/archives/52/