我有一些数据,如UserId,tokenId,sessionId,我必须传递每个用于验证/验证/处理的ajax调用。
我将这些数据存储在全局JS对象中。 因此,当用户查看页面源时,这将对他们可见。
根据我的组织的渗透安全团队,其安全威胁显示敏感数据,如我们UserId,tokenId,sessionId在查看源。
如何在js /浏览器中存储该数据,在查看源上它将不可见? Web开发公司如何使用不同的方法存储userId等数据? 将这些数据存储在cookie或加密中会因其使用频繁而受到性能影响。
tokenId是CRSF令牌ID,sessionId是会话ID。
答案 0 :(得分:0)
我必须根据很多假设来回答这个问题,但如果您编辑问题并让我知道,我会更新我的答案。
什么是UserId
?
如果这是用户的明文ID,则可能对您的系统造成风险。
e.g。如果您的管理员帐户的ID为0
,然后恶意用户将其UserId
Cookie设置为0
,这是否会使恶意用户成为管理员?
你还没有说tokenId
或sessionId
是什么,所以很难进一步评论,但为了这个答案,我会假设tokenId
是一个Anti-CRSF token和sessionId
是身份验证会话ID。
如果是这种情况,则UserId
不应来自Cookie值或来自页面上的隐藏字段 - 它应该来自sessionId
的服务器端,并且应来自任何会话当前用户已通过。
如果您设置了appropriate headers to disable public caching ,则在源中显示tokenId
和sessionId
没有固有风险,但如果这些值已在Cookie中可用那么就没有必要在代码中再次设置它们。由于您的AJAX请求将以两种方式(请求和cookie)发送值,因此这有可能business logic flaw的气味 - 因此请确保您只使用一种方法来确保所有逻辑都是一致的。
总而言之,最安全的"会话数据的位置实际上是在cookie中,因为它们不会在cookie机制之外缓存(例如在缓存页面的源内)。但是,请确保这些Cookie仅通过HTTPS发送,并且通过设置Secure和HTTP Only标记无法通过DOM提供。