最初发表在"异口同声"笔记上.
我开着一个出版门 除非上面的每个数字 都能追溯到一个被宣布的证据 一份草稿载有一个文件,列出证据条目,每个标记,以及五个机器门中的一个,将一个页面的HTML切入到纯文本上,从文本中抽出每个数字,如果一个数字没有匹配条目,则封存草稿。
所有五个大门都必须在人们看到草案签字之前经过,判决是永久的——编辑尸体,你从一个干净的档案开始。
一个需要门门号码的计算器 我无法看见我撞到设计设计的边缘 一个付费计算器页 上面有一个我运行的单独的站点建设工具: 输入一个收入数字,拿回费用和你实际带回家的金额。
这样的计算器需要JavaScript,而JavaScript需要知道收费标准.
不过,大门不能在标签内读取。
无论将一页的 HTML 变成可校验的文本,要么将脚本正文拖入文本中——一个从未真正声称的虚假正文并标出正文的数字——要么完全放弃它,在门所要捕捉的事物上,一个虚假的负文.
输了两个办法 二修即能一一想出,而二者相坏.
第一种是教门去解析JavaScript.
这意味着将JS解析器放入大门内,这意味着大门现在拥有了第二语言的运行时间——从那时起,下游的每一个捆绑者,修饰者,和语法变化成为它的维护债务.
更糟糕的是,这是一场输掉的条件属于下一位编辑代码的人的战斗:将JavaScript稍微扭动一下,解析器就输了.
第二是完全免去标签的检查.
这比看起来的更危险,我知道, 因为我在当天早晨就完成了 完全这个错误的版本。
包含一个字母数字标识符的豁免——例如CSS值——所以它们不会被标记为无源数字.
英国的便士注解 符合同样的豁免 并直接通过支票,未受影响。
便利豁免悄悄地成为了洗钱的渠道。
免责批发本会重开 同样的缺陷与更大的洞。
使 JavaScript 无法读取 所以我走第三条路:不是教门去读"JavaScript",而是确保"JavaScript"中没有任何值得阅读的内容.
收费标准是这样的: 速率会作为表行上的属性进入页面.
此行是 HTML, 门可以读取, 它的单元格值已经从引用的证据条目中解出 。
JavaScript本身从未看到过收费率——它读取了一个已经坐在屏幕上,已经得到证明的数值,并在上面做算术.
门最终能够验证这个计算器的速率来自何处,而不解释JavaScript的一行. 5个变化者,5个执行点 这样的方向本身并不是保证 只有在每一部分都附有执行点之后,这个部分才成为规则,这个部分有五个执行点.
比率仅通过证据参考输入。
检查在已声明的条目中计算行点的每分速率; 直接将字面数字写入行中而构建失败 。
里面的每个数字字都属于这个集合 这是一个新的门, 它是一个实际承载 设计重量。
这不是一个解析器——它是一个白名单。 0、1和2包含指数和标志;100包含百分比划分。
一个域号在结构上不能符合该集.
加上它意味着撞出大门的 计划从v4到v5。
计算器输出必须等同宣布的衍生值.
一个小型的测试装置可以运行8种情景,并对照闸门作为衍生值的计算结果——四舍五入、货币符号和数字计数——进行精确的字符串匹配。
脚本和风格内容从来就没有成为正文. ,为 ch 调取页面正文的函数