使文本难以通过自动方式解析

Make text difficult to parse by automated means

我需要在我的 single-page web-application 中包含一个小的 JavaScript 片段,作为后续 AJAX- 的 内容保护机制 请求:

JavaScript

<script>
    DR.token.id = RANDOM_HASH
</script>

这种保护有一个缺陷:机器很容易提取代码段的 RANDOM_HASH 部分。

为了解决这个问题,我使用一个简单的服务器端脚本在代码片段中添加了一些噪音,从而产生了不同的版本:

document.write("<SCR" + "IPT>DR.toke" + "n.id" + " = " + "\"RANDO" + " + "M_HASH\"</" + "SCRIPT>"
document.write("<S" + "CRIPT>DR.t" + "oken.id" + " = " + "\"RAN" + " + "DOM_HASH\"</SCRI" + "PT>"
...

但是,只要稍微复杂一点的正则表达式就可以再次成功提取 RANDOM_HASH

我不想使用即时混淆器,因为性能至关重要。是否有任何可靠的解决方案可以让机器在没有 显着 努力的情况下难以提取随机哈希?

我不关心能够 运行 Javascript 代码来实现这种提取的机器,我只是想阻止普通人写一个琐碎的脚本这将收集我的应用程序的数据。

您必须认识到,您在网页上所做的任何事情都不会被窥探。您所能期望的最好结果就是打败幼稚的黑客技术。就此而言,您的 "add some noise" 方法非常合理。是的,它可以用 "slightly more complex regex" 进行攻击,但攻击者如何知道 可能是哪个 正则表达式?这需要分析来源,在我看来,这算是一项重大努力。

如果它会给您一些额外的(但错误的)安全措施,您可以对 document.write() 的参数进行 base-64 编码(离线)并即时解码。我认为这不会对性能产生太大影响。 (我认为,调用 document.write() 本身会淹没解码开销。)它肯定会将您的敏感信息与随意阅读页面源代码的人隔离开来。因此,例如

的 base-64 编码
<script>DR.token.id = RANDOM_HASH</script>

PHNjcmlwdD5EUi50b2tlbi5pZCA9IFJBTkRPTV9IQVNIPC9zY3JpcHQ+

因此您的文档可能包含:

document.write(fromBase64('PHNjcmlwdD5EUi50b2tlbi5pZCA9IFJBTkRPTV9IQVNIPC9zY3JpcHQ+'));

其中 fromBase64() 是您的 base-64 解码器。