蓄意协议错误:兰利法则

16-09-29 banq
         

Langley's Law(兰利法则)是与著名的伯斯塔尔法则(Postel’s Law)相反,伯斯塔尔法则是:

发送时要保守;接收时要开放自由;

Be conservative in what you send, be liberal in what you accept.

HTML语法就是遵循伯斯塔尔法则,HTML能接受任何文本,哪怕不严格遵循HTML语法。在发送文档的时候,我们会尽量保守一些,尽量采用最佳实践,尽量确保文档格式良好。但从浏览器的角度说,它们必须以开放的姿态去接收任何文档。

伯斯塔尔法则的问题是带来互用性差,将伯斯塔尔法则反过来就是兰利法则:

发送时要偶尔邪恶;接受时要保守。

Be occasionally evil in what you send, and conservative in what you accept.

比如Netflix使用chaos monkey故意捣乱其系统,以获得系统的健壮性,下面是google推出Roughtime这个NTP授权时间校验服务的引文:

一个健康的软件生态系统不会出现通过指定软件应该如何行为,然后才能设定其软件实现做正确的事情,相反,我们计划让Roughtime服务器针对一小部分请求返回无效,伪造的答案。这些虚假答案将包含错误的时间,而且也将是另一种方式无效,例如,一个签名可能不正确,或消息中的标签可能是错误的顺序。客户端实现如果不进行所有必要的检查,就不会发现他们得到胡说八道的答案,这对于他们变成一个黑帽交谈(Blackhat talk)前暴露错误BUG已经足够有效。

Introducing Deliberate Protocol Errors: Langley’s