我需要在我的 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 代码来实现这种提取的机器,我只是想阻止普通人编写一个会收集我的应用程序数据的琐碎脚本。
最佳答案
您必须认识到,您在网页上所做的任何事情都不会受到窥探的威胁。您所能期望的最好结果就是打败幼稚的黑客技术。就此而言,您的“添加一些噪音”方法非常合理。是的,它可以用“稍微复杂一点的正则表达式”进行攻击,但攻击者如何知道哪个可能是正则表达式?这需要分析源代码,在我看来这是一项重大工作。
如果它会给您一些额外的(但错误的)安全措施,您可以对 document.write()
的参数进行 base-64 编码(离线)并即时解码它们。我认为这不会对性能产生太大影响。 (我认为,调用 document.write()
本身会淹没解码开销。)它肯定会将您的敏感信息与随意阅读页面源代码的人隔离开来。因此,例如,
<script>DR.token.id = RANDOM_HASH</script>
是
PHNjcmlwdD5EUi50b2tlbi5pZCA9IFJBTkRPTV9IQVNIPC9zY3JpcHQ+
因此您的文档可能包含:
document.write(fromBase64('PHNjcmlwdD5EUi50b2tlbi5pZCA9IFJBTkRPTV9IQVNIPC9zY3JpcHQ+'));
fromBase64()
是您的 base-64 解码器。
关于javascript - 使文本难以通过自动方式解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245309/