我必须根据很多假设来回答这个问题,但是如果您编辑问题并让我知道,我会更新我的答案。
是什么UserId
?
如果这是用户的明文 ID,那么它可能会给您的系统带来风险。
例如,如果您的管理员帐户有 ID 0
,然后恶意用户将他们的UserId
cookie 设置为0
- 这会使恶意用户成为管理员吗?
你还没有说什么tokenId
或者sessionId
是什么所以很难进一步评论,但为了这个答案的目的,我将假设它tokenId
是一个Anti-CRSF 令牌并且sessionId
是身份验证会话 ID。
如果是这种情况,则UserId
不应来自 cookie 值或页面上的隐藏字段 - 它应该来自服务器端,sessionId
并且应该来自当前用户已通过身份验证的任何会话。
如果您已设置适当的标头以禁用公共缓存,则在源代码中显示tokenId
和显示没有固有风险,但如果这些值已经在 cookie 中可用,则无需在代码中再次设置它们。这有潜在的业务逻辑缺陷的味道,因为您的 AJAX 请求将以两种方式(请求和 cookie)发送值 - 所以请确保您只使用一种方式来确保所有逻辑都是一致的。sessionId
总而言之,会话数据最“安全”的地方实际上是在 cookie 中,因为它们不会被缓存在 cookie 机制之外(例如在缓存页面的源中)。但是,请确保这些 cookie 仅通过 HTTPS 发送,并且通过设置Secure和HTTP Only标志在 DOM 上不可用。