哪里可以在浏览器上存储敏感数据?

时间:2014-07-17 11:27:35

标签: javascript php security browser penetration-testing

我有一些数据,如UserId,tokenId,sessionId,我必须传递每个用于验证/验证/处理的ajax调用。

我将这些数据存储在全局JS对象中。 因此,当用户查看页面源时,这将对他们可见。

根据我的组织的渗透安全团队,其安全威胁显示敏感数据,如我们UserId,tokenId,sessionId在查看源。

如何在js /浏览器中存储该数据,在查看源上它将不可见? Web开发公司如何使用不同的方法存储userId等数据? 将这些数据存储在cookie或加密中会因其使用频繁而受到性能影响。

tokenId是CRSF令牌ID,sessionId是会话ID。

1 个答案:

答案 0 :(得分:0)

我必须根据很多假设来回答这个问题,但如果您编辑问题并让我知道,我会更新我的答案。

什么是UserId

如果这是用户的明文ID,则可能对您的系统造成风险。

e.g。如果您的管理员帐户的ID为0,然后恶意用户将其UserId Cookie设置为0,这是否会使恶意用户成为管理员?

你还没有说tokenIdsessionId是什么,所以很难进一步评论,但为了这个答案,我会假设tokenId是一个Anti-CRSF tokensessionId是身份验证会话ID。

如果是这种情况,则UserId不应来自Cookie值或来自页面上的隐藏字段 - 它应该来自sessionId的服务器端,并且应来自任何会话当前用户已通过。

进行身份验证

如果您设置了appropriate headers to disable public caching ,则在源中显示tokenIdsessionId没有固有风险,但如果这些值已在Cookie中可用那么就没有必要在代码中再次设置它们。由于您的AJAX请求将以两种方式(请求和cookie)发送值,因此这有可能business logic flaw的气味 - 因此请确保您只使用一种方法来确保所有逻辑都是一致的。

总而言之,最安全的"会话数据的位置实际上是在cookie中,因为它们不会在cookie机制之外缓存(例如在缓存页面的源内)。但是,请确保这些Cookie仅通过HTTPS发送,并且通过设置SecureHTTP Only标记无法通过DOM提供。