2

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

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

根据我组织的渗透安全团队的说法,它的安全威胁是在查看源时显示我们的 UserId、tokenId、sessionId 等敏感数据。

如何将该数据存储在查看源代码时不可见的 js/浏览器中?Web开发公司使用不同的方法来存储像userId这样的数据?将这些数据存储在 cookie 中或加密会因为其大量使用而影响性能。

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

4

1 回答 1

1

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

是什么UserId

如果这是用户的明文 ID,那么它可能会给您的系统带来风险。

例如,如果您的管理员帐户有 ID 0,然后恶意用户将他们的UserIdcookie 设置为0- 这会使恶意用户成为管理员吗?

你还没有说什么tokenId或者sessionId是什么所以很难进一步评论,但为了这个答案的目的,我将假设它tokenId是一个Anti-CRSF 令牌并且sessionId是身份验证会话 ID。

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

如果您已设置适当的标头以禁用公共缓存,则在源代码中显示tokenId和显示没有固有风险,但如果这些值已经在 cookie 中可用,则无需在代码中再次设置它们。这有潜在的业务逻辑缺陷的味道,因为您的 AJAX 请求将以两种方式(请求和 cookie)发送值 - 所以请确保您只使用一种方式来确保所有逻辑都是一致的。sessionId

总而言之,会话数据最“安全”的地方实际上是在 cookie 中,因为它们不会被缓存在 cookie 机制之外(例如在缓存页面的源中)。但是,请确保这些 cookie 仅通过 HTTPS 发送,并且通过设置SecureHTTP Only标志在 DOM 上不可用。

于 2014-07-18T12:19:36.500 回答