我发现此JavaScript非常奇怪,当我在控制台浏览器上运行时,它会通过以下消息向我发出警报
'始终警惕包含引号的Javascript。没有引号=安全!'
我对此很好奇(真的不知道这是否是一件事,对某些事情有用吗?)
如果您想分享有关这种“技术”的知识,我将不胜感激! :)
for(A in {A:0}){alert(unescape(escape(A).replace(/u.{8}/g,[])))};
答案 0 :(得分:7)
有关此博客帖子的详细说明:https://www.stefanjudis.com/blog/hidden-messages-in-javascript-property-names/
此代码段的主要“窍门”是{
和A
之间有许多不可见的unicode字符:
{A:0}
您可以这样查看它们的代码点:
Object.keys({A:0})[0].split("").map(x => x.codePointAt(0))
// [65, 56128, 56684, 56128, 56695, 56128, 56673, 56128, 56697, 56128, 56691, 56128, 56608, 56128, 56674, 56128, 56677, 56128, 56608, 56128, 56695, 56128, 56673, 56128, 56690, 56128, 56697, 56128, 56608, 56128, 56687, 56128, 56678, 56128, 56608, 56128, 56650, 56128, 56673, 56128, 56694, 56128, 56673, 56128, 56691, 56128, 56675, 56128, 56690, 56128, 56681, 56128, 56688, 56128, 56692, 56128, 56608, 56128, 56675, 56128, 56687, 56128, 56686, 56128, 56692, 56128, 56673, 56128, 56681, 56128, 56686, 56128, 56681, 56128, 56686, 56128, 56679, 56128, 56608, 56128, 56689, 56128, 56693, 56128, 56687, 56128, 56692, 56128, 56677, 56128, 56691, 56128, 56622, 56128, 56608, 56128, 56654, 56128, 56687, 56128, 56608, 56128, 56689, 56128, 56693, 56128, 56687, 56128, 56692, 56128, 56677, 56128, 56691, 56128, 56608, 56128, 56637, 56128, 56608, 56128, 56691, 56128, 56673, 56128, 56678, 56128, 56677, 56128, 56609]
答案 1 :(得分:-1)
您可以运行以下代码来了解为什么在警告框中出现Always be wary of Javascript containing quotes. No quotes = safe!
的原因-
您所看到的不是它看起来的样子
//for(A in {A:0}){alert(unescape(escape(A).replace(/u.{8}/g,[])))};
//Let's run this script in steps - copied from above only
var object = {A:0};
//get key of above object
var key = Object.keys(object)[0];
//get value of above object
var value = object[key];
//here key is not actual character A
console.log(key === "A");
//same case for value
console.log(value === 0);