有鉴于Proxy将成为贫苦大众(特指“没能力购买网络服务”的网民)今后数年的必备用品,Proxy 1.0的原始框架已无法承载这种压力。最近不少Proxy 2.0的设计蓝图浮出水面,本人亦有一些考量,这里简单小结一下。
Security or Obscurity ?
Build your dam for reasonable tsunami, not 2012. Lay your tarmac for reasonable vehicles, not Transformers.
2.0的其中一种思维是增强Proxy Security,强制HTTPS协议是首选的方式。我觉得还可以换个角度看,很多时候用户需要的并不是安全性,或者说使用Proxy的网民大多数并不清 楚如何增强安全性。这时我们需要的是增加Obscurity,当然不是指降低用户界面的易用性,而是增加生成HTML代码的委婉性。
搞过计算机安全的人都知道Security through Obscurity是没戏的,那为什么放弃Security选择Obscurity呢?理由简单,基于使用Proxy的初衷。若我们希望完全防止MITM, 那Security是必须的;但“窃听者是全能的”的假设是否适合一个Public Proxy?我认为值得商榷。如今用户期待的是“能正常浏览网页”,而不是“安全匿名的浏览网页”。再者,安全匿名不仅必须加密通信,还需要用户完全信任 服务器运营者才行,验证后者比技术上保证前者更加困难。
降低安全假设的好处在于它能大幅度延展Proxy的设计选择。说得很玄乎,实际操作很简单。举个例:关键词破坏是国内网站常用的手段,为什么我们不能挪为己用?当然,实际运行时我们可以稍微修改一下“破坏”的方式。
正太什么的最讨厌了,萝莉万岁!
以上句子在客户端上看没有任何问题,但对于机器来说,它是——
<p>正太<span style=”display:none;”>什么的最讨厌了,萝莉</span>万岁!</p>
如此一来,正太控的内容被正常浏览了,而机器还以为我们是不懂网页标准的萝莉控。这种设计有数条好处——
- 这种模式可以有无数种变形,大幅度增加了Keyword Matching的难度。
- 既然有机器喜欢读我们的HTML,那就让他们去读好了,避免额外加密。
- 它比客户端解RSA靠谱。运行速度和浏览体验都更胜一筹。
牺牲复制粘贴(插入文字也会被复制)换来的是运行效率与更新速度。Proxy服务器用display:none和eval等方式处理文字与链接 (Pattern Matching)比加密整个页面便宜得多。更可以在站外维护一个Keyword List,允许用户提交反馈,定时更新,照顾最新的指示。
A Hell for Computation Overlord.
智能系统最喜欢的东西:可预测的环境。不要给它们任何机会,尽可能破坏所有既定的网络规定。假如对方熟悉Base64与ROT13,我们就把URL换成用户可自定义的同样快速的Substitution Cipher,把随机的Client Key藏在Cookie里。若Client Key对不上,相同的请求服务器只会返回错误。我们甚至可以进一步混合时间限制,以免Client Key被重复利用。
破解Substitution Cipher需要26!个单位时间,已经大幅度超出智能系统可承受的范围。若尝试截取Client Key,则陷入Uncertainty的游击战。Obscurity再次立功。
Where is my invisible coat ?
等你成功穿越Overlord,它的手下就要来找你了,于是谈到Proxy 2.0真正的瓶颈所在——假如IP或域名下水了,Proxy的命运也到此为止。在IPv6和TLD大开放的时代(又称“网络廉价化”的时代)还没到来之前,这些东西都是非常珍贵的资源。
为此,所谓Proxy Chain需要与时代并进,履行Behavioral Separation,设置一个Reverse Proxy在Web前端,将后端服务器处理过的内容传送至客户端。不少简单的Proxy都可以改造为Reverse Proxy,放置在可爱的免费空间上,即便Reverse Proxy不幸意外,主服务器还是安全的。
与此同时,一个只处理数据的服务器也比一个拥有华丽前端的服务器隐蔽,降低被当成炮灰的风险。
回应小标题的提问——你不用的时候往invisible coat上贴个标签不就好了。别让问题卡在找invisible coat,将它转变成找标签的问题。Reverse Proxy就是这个标签,水下的冰山却是invisible coat。
Suggestions ?
除此之外,还有什么旁门左道可以使用?欢迎分享。
Secrecy is over-rated, when Google is your proxy.
更新:WordPress的Feed把span标签去掉了,订阅器里无法看到测试效果,请直接访问文章页面。
没有评论:
发表评论