为什么gmail使用eval?

Mar*_*ark 5 javascript gwt eval

这个问题表明,使用eval是一种不好的做法,许多其他问题表明它是"邪恶的".

这个问题的答案表明,使用eval()可能有助于其中一种情况:

  • 评估从远程服务器收到的代码.(假设您想通过向其发送JavaScript代码来创建可以远程控制的站点?)
  • 评估用户编写的代码.如果没有eval,则无法编程,例如,在线编辑器/ REPL.
  • 动态创建任意长度的函数(function.length是只读的,所以唯一的方法是使用eval).
  • 加载脚本并返回其值.例如,如果您的脚本是自调用函数,并且您想要对其进行求值并得到它的结果(例如:my_result = get_script_result("foo.js")),那么编写函数get_script_result的唯一方法就是使用在里面评估.
  • 在不同的闭包中重新创建一个函数.

在查看Google帐户页面时,我发现了以下内容:

(function(){eval('var f,g=this,k=void 0,p=Date.now||function(){return+new Date},q=function(a,b,c,d,e){c=a.split("."),d=g,c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(;c.length&&(e=c.shift());) [a lot of code...] q("botguard.bg.prototype.invoke",K.prototype.ha);')})()</script>
Run Code Online (Sandbox Code Playgroud)

我只是无法得到它是如何有用的,因为它与上述任何情况都不匹配.有评论说:

 /* Anti-spam. Want to say hello? Contact (base64)Ym90Z3VhcmQtY29udGFjdEBnb29nbGUuY29tCg== */
Run Code Online (Sandbox Code Playgroud)

我看不出eval将如何用作反垃圾邮件.有人可以告诉我为什么在这个特定情况下使用它?

osg*_*sgx 20

来自plan99.net的Mike Hearn创建了反机器人JS系统,你可以看到它的反逆向工程方法的部分内容(随机加密).他的信中提到了它:https://moderncrypto.org/mail-archive/messaging/2014/000780.html

[消息]现代反垃圾邮件和E2E加密Mike Hearn Fri Sep 5 08:07:30 PDT 2014

防止批量注册涉及大量魔术.作为一个例子,我创建了一个随机生成加密JavaScripts的系统,该系统旨在抵制逆向工程尝试.这些程序知道如何检测自动注册脚本并将其完全删除 http://webcache.googleusercontent.com/search?q=cache:v6Iza2JzJCwJ:www.hackforums.net/archive/index.php/thread-2198360.html+和CD = 8&HL = EN&CT = clnk&GL = CH

您可以通过"Ym90Z3VhcmQtY29udGFjdEBnb29nbGUuY29tCg"base64联系代码或"botguard-contact"来查看有关系统的信息.

帖子http://webcache.googleusercontent.com/search?q=cache:v6Iza2JzJCwJ:www.hackforums.net/archive/index.php/thread-2198360.html+&cd=8&hl=en&ct=clnk&gl=ch说:

这样做的原因是谷歌几周/几个月前推出的新保护.让我告诉你新Botguard的一部分(谷歌称之为)代码:

/* Anti-spam. Want to say hello? Contact (base64) Ym90Z3VhcmQtY29udGFjdEBnb29nbGUuY29tCg== */
Run Code Online (Sandbox Code Playgroud)

您将不得不破解此JavaScript的算法,以便能够创建允许您注册新帐户的VALID令牌.Google仍然允许您创建没有这些令牌的帐户,您想知道为什么吗?

这是因为他们等了几个星期,跟踪你和你的愚蠢机器人留下的痕迹而不是制造禁令.

您已售出的所有帐户,您的客户创建的所有帐户都将被禁止.您的软件可能仍然能够在banwave之后创建帐户,但最新用途是什么?

因此,botguard是可选的安全措施.它可以在浏览器中正确计算,但不能在机器人使用的某些/大多数javascript引擎中计算.您可以通过不输入正确的代码来绕过它,但创建的帐户将被标记为僵尸帐户,并且很快就会被禁用(链接的帐户也将被终止).

GitHub上还有几个史诗主题:

https://github.com/assaf/zombie/issues/336

与以下示例中更基本的上下文版本相比,为什么Zombie会产生不正确的输出?

输出的变化取决于document.bg何时初始化为新的botguard.bg(),因为botguard脚本在编码时混合了时间戳盐.

mikehearn于2012年5月21日评论嗨,

我在Google上为注册和登录安全工作.

请勿尝试自动化Google注册表单.这不是一个好主意,您正在分析一个专门用来阻止您的系统.

没有合法的用例来自动化此表单.如果您这样做并且我们检测到您,则您使用它创建的帐户将立即终止.与您使用的IP相关联的帐户(即您的个人帐户)也可能被终止.

如果您认为自己拥有合法的用例,那么您可能最好去探索其他选择.

在https://github.com/jonatkins/ingress-intel-total-conversion/issues/864主题中有一些细节:

a 包含以此注释开头的严重混淆代码:

该代码包含许多通用的东西:useragent嗅探(yay,Internet Explorer),对象类型检测,用于监听鼠标/ kb事件的代码......所以它看起来像一些通用库.在那之后,有很多神秘的东西完全没有意义.有趣的是它调用标记为"botguard.bg.prototype.invoke"的东西.显然这必须是google的botguard.据我所知,它收集有关页面及其浏览器上的用户行为的数据,并将其与其他已知数据相对应,这样它可以检测异常使用并检测机器人(有点像入口客户端中的clienBlob).我的猜测是它会检测用户发送请求所需的操作(点击,地图事件最明智)

因此,谷歌使用邪恶的eval来对抗邪恶的用户,这些用户无法快速/正确地模拟评估的代码.


Amb*_*ber 3

eval()当用于不受信任的输入时是危险的。当用于硬编码字符串时,通常情况并非如此。

  • 是的,但是这里有什么意义吗?我的意思是脚本也可以在没有 eval 的情况下运行 (6认同)