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

时间:2015-05-14 19:04:14

标签: javascript regex obfuscation

我需要在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代码以实现此提取的计算机,我只打算阻止普通的Joe编写一个可以收集我的应用程序数据的简单脚本

1 个答案:

答案 0 :(得分:2)

您必须认识到,您在网页上所做的任何操作都不会对窥探安全。你能想到的最好的就是打败天真的黑客技术。在这种程度上,你的“添加一些噪音”的方法是完美的。是的,它可以被“稍微复杂的正则表达式”攻击,但攻击者如何知道哪个正则表达式可能是什么?我需要分析一下来源,这在我看来属于重要的努力。

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

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

PHNjcmlwdD5EUi50b2tlbi5pZCA9IFJBTkRPTV9IQVNIPC9zY3JpcHQ+

所以你的文件可能包含:

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

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