我找到了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是正确的还是这个问题不明确?!
答案 0 :(得分:0)
根据经验,为防止XSS,请不要信任来自客户端的数据。
这包括本地存储中的任何内容。 LocalStorage没有像cookies这样的HTTPOnly标志,使Javascript无法访问。即使这样,用户也可以使用调试工具对其进行修改。出于这个原因,我会警告不要在localStorage上使用eval()
。我鼓励您使用JSON sans eval来读取JSON对象,而不是将它用于函数。您应该能够通过使用适当的缓存和offline applications将函数放入localStorage来完成任何操作。
顺便说一下,你描述它的方式
localStorage.evalItem(key).toSource() == localStorage.getItem(key);
所以我不相信你的方法可以阻止任何人阅读,如果它可以评估。