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

Javascript 使文本难以通过自动方式解析,javascript,regex,obfuscation,Javascript,Regex,Obfuscation,我需要在我的上包含一个小JavaScript片段,作为后续AJAX请求的内容保护机制: JavaScript <script> DR.token.id = RANDOM_HASH </script> 然而,只要稍微复杂一点的正则表达式就可以再次成功地提取随机散列 我不喜欢使用动态模糊器,因为性能至关重要。有没有可靠的解决方案会使机器在不付出大量努力的情况下难以提取随机散列 我不关心能够运行Javascript代码来实现这种提取的机器,我只是想阻止普通的Joe编写

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

JavaScript

<script>
    DR.token.id = RANDOM_HASH
</script>
然而,只要稍微复杂一点的正则表达式就可以再次成功地提取
随机散列

我不喜欢使用动态模糊器,因为性能至关重要。有没有可靠的解决方案会使机器在不付出大量努力的情况下难以提取随机散列


我不关心能够运行Javascript代码来实现这种提取的机器,我只是想阻止普通的Joe编写一个简单的脚本来获取我的应用程序的数据。

你必须认识到,你在网页上所做的任何事情都不安全。你能指望的最好办法就是打败幼稚的黑客技术。在这种程度上,你的“添加一些噪音”方法是完全正确的。是的,它可以用“稍微复杂一点的正则表达式”进行黑客攻击,但攻击者如何知道可能是哪个正则表达式呢?这需要分析来源,在我看来,这是一项重要的工作

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

<script>DR.token.id = RANDOM_HASH</script>
因此,您的文档可以包含:

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

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

缩小还不够模糊吗?@Tony Thing,这个小片段没有太多可缩小的地方。如果我看到像
a.b.c=RANDOM\u hash
这样的东西,我怎么会知道如何使用它呢?也许您最好将其完全从DOM中删除,并将其存储在cookie或本地存储中。根据服务器的不同,您可以使用中间件进行加密/解密。可能是这样的。如果var始终是window.DR.token.id,为什么任何“黑客”都会用regex来处理这个问题?我认为这里真正的问题是:OP想要保护什么?您对JS变量进行散列似乎是在浪费时间。@Jonathan我试图保护应用程序中的所有AJAX请求,因为前面提到的随机散列码只包含在索引页中,如果没有它,服务器将拒绝XHR。这确保了使用我的JSON API的机器保证在后续通信之前也下载了索引页。“我应该把这一点添加到问题中吗?”乔纳森——的确如此。这就是为什么我强调这是虚假的安全性。然而,我发现它对自动邮件刮取器非常有效。(添加“噪音”并不是那么有效,因为电子邮件地址有一种独特的模式,即使在有噪音的情况下也能被识别。)
PHNjcmlwdD5EUi50b2tlbi5pZCA9IFJBTkRPTV9IQVNIPC9zY3JpcHQ+
document.write(fromBase64('PHNjcmlwdD5EUi50b2tlbi5pZCA9IFJBTkRPTV9IQVNIPC9zY3JpcHQ+'));