论坛首页 Web前端技术论坛

大家看过这样的JS代码吗...

浏览 10033 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-01  
应该是炫耀吧,不过炫耀的话,也要搞个稍微高级点的啊
0 请登录后投票
   发表时间:2011-10-01  
一个国外大赛的代码或其模仿
0 请登录后投票
   发表时间:2011-10-01  

我試著解釋一下

先將代碼格式化一下

(__=-~-~[])   * (-~[]<<(__))  +
__            * (-~[]<<(__))  +
(____=-~-~__)                 +
(-~[]<<(__))  * -~____        +
____                          +
__                            +
0;

將變量重新命名

(b=-~-~[])   * (-~[]<<(b))  +
b            * (-~[]<<(b))  +
(a=-~-~b)                   +
(-~[]<<(b))  * -~a          +
a                           +
b                           +
0;

其中以第一行為例

[] 空陣列被轉為數字時會返回0,例如 (+[] = 0);
~ 是位運算取反,即將正數加一變負數,負數加一變正數,例如 (~2 = -3), (~-2 = 1);
-~ 也就是將數字 + 1,因此 (b=-~-~[]) 等於 (b = 1 + 1 + 0 = 2)。

<< 是位算運左移,這裡有點難也不須特別解釋,就是將一數乘以2的某數冪,總知 (-~[]<<(b)) 等於 (1 << (2) = 1 * 2 * 2 = 4)

最後

(b=2)        * (4)  +
2            * (4)  +
(a=4)               +
(4)          *  5   +
4                   +
2                   +
0;

2*4+2*4+4+4*5+4+2 = 46
1 请登录后投票
   发表时间:2011-10-02   最后修改:2011-10-02
请参考: http://www.iteye.com/topic/947149

这种代码最大用处是:如果你是黑客,可以用来绕过一些针对跨站点脚本攻击的检查。某些站点对于服务器端返回的json,在进行简单的合法性检查之后,会直接eval,而种另类的代码,很有可能能通过这类检查。

这个故事主要是想说,客户端不要轻易相信服务器端发过来的东西。
0 请登录后投票
   发表时间:2011-10-02  
没事找事啊。。。
0 请登录后投票
   发表时间:2011-10-07  
廢廢廢 写道

我試著解釋一下

先將代碼格式化一下

(__=-~-~[])   * (-~[]<<(__))  +
__            * (-~[]<<(__))  +
(____=-~-~__)                 +
(-~[]<<(__))  * -~____        +
____                          +
__                            +
0;

將變量重新命名

(b=-~-~[])   * (-~[]<<(b))  +
b            * (-~[]<<(b))  +
(a=-~-~b)                   +
(-~[]<<(b))  * -~a          +
a                           +
b                           +
0;

其中以第一行為例

[] 空陣列被轉為數字時會返回0,例如 (+[] = 0);
~ 是位運算取反,即將正數加一變負數,負數加一變正數,例如 (~2 = -3), (~-2 = 1);
-~ 也就是將數字 + 1,因此 (b=-~-~[]) 等於 (b = 1 + 1 + 0 = 2)。

<< 是位算運左移,這裡有點難也不須特別解釋,就是將一數乘以2的某數冪,總知 (-~[]<<(b)) 等於 (1 << (2) = 1 * 2 * 2 = 4)

最後

(b=2)        * (4)  +
2            * (4)  +
(a=4)               +
(4)          *  5   +
4                   +
2                   +
0;

2*4+2*4+4+4*5+4+2 = 46

我擦,现在真的像表情了,
实在是看不懂.............
0 请登录后投票
   发表时间:2011-10-08  
贝壳水母 写道
我擦,我还以为这是一组表情....面壁....

+1
0 请登录后投票
   发表时间:2011-10-09  
看不懂,这个全不?
0 请登录后投票
   发表时间:2011-10-10  
好高深哦.
0 请登录后投票
   发表时间:2011-10-10  
廢廢廢 写道

我試著解釋一下

先將代碼格式化一下

(__=-~-~[])   * (-~[]<<(__))  +
__            * (-~[]<<(__))  +
(____=-~-~__)                 +
(-~[]<<(__))  * -~____        +
____                          +
__                            +
0;

將變量重新命名

(b=-~-~[])   * (-~[]<<(b))  +
b            * (-~[]<<(b))  +
(a=-~-~b)                   +
(-~[]<<(b))  * -~a          +
a                           +
b                           +
0;

其中以第一行為例

[] 空陣列被轉為數字時會返回0,例如 (+[] = 0);
~ 是位運算取反,即將正數加一變負數,負數加一變正數,例如 (~2 = -3), (~-2 = 1);
-~ 也就是將數字 + 1,因此 (b=-~-~[]) 等於 (b = 1 + 1 + 0 = 2)。

<< 是位算運左移,這裡有點難也不須特別解釋,就是將一數乘以2的某數冪,總知 (-~[]<<(b)) 等於 (1 << (2) = 1 * 2 * 2 = 4)

最後

(b=2)        * (4)  +
2            * (4)  +
(a=4)               +
(4)          *  5   +
4                   +
2                   +
0;

2*4+2*4+4+4*5+4+2 = 46

厉害!
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics