能否对Chrome扩展进行Base64编码?

7
我想对我的Chrome扩展程序中的一部分进行Base64编码。但是,在我尝试测试时,它没有起作用。(未编码的扩展程序正常工作)。
是否可以将JavaScript的一部分进行Base64编码以在Chrome扩展程序中使用?如果可以,应该如何实现?
1个回答

12
全球通用的 atob 方法可用于解码 base64 字符串(btoa 可将字符串编码为 base64)。解码字符串后,可以使用 eval 将其作为代码进行解析并运行。

例如,以下是一个单行代码,可打印当前扩展的 ID:

alert(eval(atob('Y2hyb21lLmkxOG4uZ2V0TWVzc2FnZSgnQEBleHRlbnNpb25faWQnKQ==')));

解释

我通过在JavaScript控制台中输入btoa("chrome.i18n.getMessage('@@extension_id')")生成了上一个base64字符串。您可以使用任何其他方法(例如base64命令)。这是前一个一行代码的完整分解。

alert(eval(atob(btoa("chrome.i18n.getMessage('@@extension_id')")));
//atob decodes from base64, btoa encodes to base64, so they cancel out each other
alert(eval(          "chrome.i18n.getMessage('@@extension_id')" ));
//eval parses the string as code, so we get
alert(                chrome.i18n.getMessage('@@extension_id')   );

内容安全策略

如果您想在扩展程序的进程中使用此方法(例如后台 / 弹出窗口页面),则需要调整内容安全策略。默认情况下,禁止从字符串生成代码。要覆盖此默认策略,请将以下条目添加到清单文件中:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

这会导致所有用户都需要重新启用扩展吗?上次当我更改权限时,一天内失去了三分之一的用户。因为自从谷歌禁用该扩展以来,它会弹出“此用户添加了这些权限”的警告,即使权限较少而不是更多。因此,许多用户认为这很可怕,并决定卸载。当像这样更改安全策略时,我需要担心这个问题吗? - programmingaddict
CSP 不会影响权限警告。 - Rob W
好的,谢谢。唯一的问题是这似乎是在警告框中,也就是弹出窗口中;但我需要它在 Chrome 扩展程序内自动在后台运行,并且需要即时执行。 - programmingaddict
@gameaddict alert框只是一个例子。你可以将整个JavaScript文件进行base64编码,然后用eval(atob("...base64 string..."));包装结果。 - Rob W
1
只是想跟进一下,我确实使用了这个,它运行得非常好。供参考。并且它在2016年仍然可用。 - programmingaddict

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接