localStorage保存对象而无法读取其内容?

时间:2011-10-13 16:50:48

标签: javascript json html5 eval local-storage

我找到了HTML5的漂亮“localStorage”功能。据我所知它只允许保存字符串,所以我们需要使用eval()/ JSON来保存对象/函数。

现在我想知道是否可以保存一个可以使用eval()但不能读取的字符串。

所以我只想使用localStorage.setItem一次,完全禁用localStorage.getItem并用“localStorage.evalItem”替换它。

这对XSS / MITM来说是一种安全的方法(在保存函数之后)。

编辑:

细节:想法是保存类似的东西:

function aes_encode(string) {
   var salt='unique_salt';
   // aes encoding...
   return salty_encoded_string
}

在访客方的非(来源)可读存储宿舍中。

由于为每位访问者创建了一次唯一的盐,因此可以验证客户端数据。

但正如詹姆斯和nwell(thx!)所说,不可能避免阅读来源。

我不认为downvoting是正确的还是这个问题不明确?!

1 个答案:

答案 0 :(得分:0)

根据经验,为防止XSS,请不要信任来自客户端的数据。

这包括本地存储中的任何内容。 LocalStorage没有像cookies这样的HTTPOnly标志,使Javascript无法访问。即使这样,用户也可以使用调试工具对其进行修改。出于这个原因,我会警告不要在localStorage上使用eval()。我鼓励您使用JSON sans eval来读取JSON对象,而不是将它用于函数。您应该能够通过使用适当的缓存和offline applications将函数放入localStorage来完成任何操作。

顺便说一下,你描述它的方式

localStorage.evalItem(key).toSource() == localStorage.getItem(key);

所以我不相信你的方法可以阻止任何人阅读,如果它可以评估。