Javascript Chrome扩展-加密存储在Chrome存储器中的数据

Javascript Chrome扩展-加密存储在Chrome存储器中的数据,javascript,google-chrome,encryption,google-chrome-extension,Javascript,Google Chrome,Encryption,Google Chrome Extension,我有一个chrome扩展,它使用API在本地存储一些用户数据 因此,引用文件: 不应存储机密用户信息!存储区域未加密 无论如何,我想在存储扩展数据之前对其进行加密,我想知道:谷歌是否提供了一种实现这一点的方法?如果没有,还有其他方法吗?免责声明 不必费劲地混淆客户端JavaScript,它就足够安全了。像WebAssembly这样的解决方案提供了更好的性能,使代码更复杂,可以进行逆向工程,但显然客户端永远不可能实现总体安全性,因此唯一可靠的选择是构建一个安全的服务器端 这只有在您想玩得开心并尝试

我有一个chrome扩展,它使用API在本地存储一些用户数据

因此,引用文件:

不应存储机密用户信息!存储区域未加密

无论如何,我想在存储扩展数据之前对其进行加密,我想知道:谷歌是否提供了一种实现这一点的方法?如果没有,还有其他方法吗?

免责声明 不必费劲地混淆客户端JavaScript,它就足够安全了。像WebAssembly这样的解决方案提供了更好的性能,使代码更复杂,可以进行逆向工程,但显然客户端永远不可能实现总体安全性,因此唯一可靠的选择是构建一个安全的服务器端

这只有在您想玩得开心并尝试代码模糊处理时才有用,如果您想保护敏感数据,千万不要依赖模糊处理

此外,根据您所使用的平台,发布模糊代码很可能违反服务条款,因此请务必首先检查这些条款


要加密数据,有一个名为的有用工具,它是一个用于加密/解密算法的库。假设您要加密某些数据,以便只能使用特定的密码短语访问这些数据,那么您将执行以下操作:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
如果使用通用算法和纯文本JavaScript,对数据进行编码不会使攻击者无法对其进行解码。如果您想更进一步,可以使用以下工具扰乱或混淆JS函数:

  • (非免费)
  • (非免费)
  • 等等(只需在谷歌上搜索)
下面是使用我上面链接的工具(1次jsobfuscate和1次javascriptobfuscator)对上述代码段进行模糊处理的示例:


很明显,这段代码是无法读取的。如果您使用不同的工具多次重复模糊处理算法,那么您将降低任何人第一眼就能理解它的机会,即使像这样存储在Chrome扩展的客户端上的数据对于能够完全访问存储它的机器的人来说是不安全的任何使用DeobFousator的人都可以对您的代码进行反向工程并理解它

“99.99%确定没有人能够解密它。”这太乐观了。如果存储的数据真的很丰富,那么再多的对象聚焦都不会阻止攻击者访问数据。在提出或使用任何解决方案之前,首先必须设计一个威胁模型。为了加密而加密是无用的,人们应该首先弄清楚他们在防御什么,然后选择合适的解决方案。如果数据真的很敏感,那么扩展应该向用户请求密码(并考虑到用户通常不擅长生成密码)。在某个时候,在客户端代码中,您需要对解密密钥进行解读,使其非常明显。Safari是如何做到的?@Steve06使用webassembly客户端只会看到编译的字节码,而不会看到生成它的实际代码。这使得从中提取信息更加困难,但当然这仍然是可能的。“更安全”并不是最好的选择,我会编辑它。@Steve06使其成为用户证明的唯一方法是不时检查服务器的时间,真的没有其他方法。客户端永远不可能是100%可信的。@TrevorReid这肯定会更安全,但显然会有让用户记住密码的缺点。可以对数据进行加密;困难在于找到一种方法获取攻击者不可见的密钥。如果您计划存储敏感数据,请在扩展中添加对Google Drive或Dropbox的支持,并将数据存储在该扩展中。您可以通过强制用户登录以从云中检索数据来进一步保护数据。但是,如果有人可以物理访问您的计算机,那么您就会遇到更大的问题;)。
var _0x7390=["\x31\x20\x35\x3D\x30\x2E\x33\x2E\x37\x28\x22\x36\x22\x2C\x22\x34\x20\x32\x22\x29\x3B\x31\x20\x38\x3D\x30\x2E\x33\x2E\x39\x28\x35\x2C\x22\x34\x20\x32\x22\x29\x3B","\x7C","\x73\x70\x6C\x69\x74","\x43\x72\x79\x70\x74\x6F\x4A\x53\x7C\x76\x61\x72\x7C\x50\x61\x73\x73\x70\x68\x72\x61\x73\x65\x7C\x41\x45\x53\x7C\x53\x65\x63\x72\x65\x74\x7C\x65\x6E\x63\x72\x79\x70\x74\x65\x64\x7C\x4D\x65\x73\x73\x61\x67\x65\x7C\x65\x6E\x63\x72\x79\x70\x74\x7C\x64\x65\x63\x72\x79\x70\x74\x65\x64\x7C\x64\x65\x63\x72\x79\x70\x74","\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function (_0xf4e9x1,_0xf4e9x2,_0xf4e9x3,_0xf4e9x4,_0xf4e9x5,_0xf4e9x6){_0xf4e9x5=function (_0xf4e9x3){return _0xf4e9x3;} ;if(!_0x7390[5][_0x7390[4]](/^/,String)){while(_0xf4e9x3--){_0xf4e9x6[_0xf4e9x3]=_0xf4e9x4[_0xf4e9x3]||_0xf4e9x3;} ;_0xf4e9x4=[function (_0xf4e9x5){return _0xf4e9x6[_0xf4e9x5];} ];_0xf4e9x5=function (){return _0x7390[6];} ;_0xf4e9x3=1;} ;while(_0xf4e9x3--){if(_0xf4e9x4[_0xf4e9x3]){_0xf4e9x1=_0xf4e9x1[_0x7390[4]]( new RegExp(_0x7390[7]+_0xf4e9x5(_0xf4e9x3)+_0x7390[7],_0x7390[8]),_0xf4e9x4[_0xf4e9x3]);} ;} ;return _0xf4e9x1;} (_0x7390[0],10,10,_0x7390[3][_0x7390[2]](_0x7390[1]),0,{}));