javascript - 如何在JavaScript中获取 session ID

标签 javascript hash csrf

目前,我被要求阻止我们的 Web 应用程序中的 CSRF 附加。 我是网络应用程序的新手。

谁能帮我解决这个问题

我已获得指导

实现此修复的一个简单方法是使用几个额外的隐藏变量呈现每个页面。

var1 = hmac_sha256(timestamp+session_id, secret)
var2 = timestamp

在后端,您获取时间戳并通过使用时间戳创建服务器端 secret 的 hmac 来验证它。如果有效,并且时间尚未过去,您可以允许请求继续。这允许您设置页面过期并验证其创建,从而减轻跨站点请求伪造攻击。不应两次使用同一个有效 token 。

我已经确定了执行相同操作的步骤。

  1. 在java脚本中生成 session id。
  2. 在服务器端(servlet)生成 key 。
  3. 将 key 从服务器发送到客户端(可能位于登录页面)。
  4. 通过时间戳、seesion id 和 key 生成来隐藏 csrf token 。

    var $csrfToken = hmac_sha256($timestamp +$seesionId + $mySecretKey)

  5. 如果获取到,则在服务器端解密相同的内容

    var $stringToHash = request.get('key')
    var $isValidToken = hmac_sha256($timestamp +$seesionId + $mySecrtKey) == request.get('csrfToken')

然后在 servlet 中继续处理请求。

任何人都可以帮我编写代码片段吗?

最佳答案

我们使用的过程是存储csrf token (由服务器生成,这是生成它的地方,而不是在客户端中。这是一种跨站请求伪造预防机制,因此服务器需要能够验证这是一个真正的 token ,而不是客户端)在 <meta name="csrf-token" value="...">元素(这是一个 W3C 验证名称),然后在使用 jQuery 进行 AJAX 调用时将其作为请求 header 传递 beforeSend :

var csrf_token = $("meta[name='csrf-token']").attr("content");
...
$.ajax({
  type: "POST",
  url: ...,
  data: {
    ...
  },
  beforeSend: function(request) {
    request.setRequestHeader('X-CSRF-Token', csrf_token);
  },
  ...
});

在这种情况下,服务器需要的 header 为 X-CSRF-Token因为我们将 NodeJS 与 Express 一起使用,而 Express 使用 Connect,这需要特定的字符串。

关于javascript - 如何在JavaScript中获取 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20364334/

相关文章:

javascript - 无法访问对象方法

c++ - 在 unordered_map<vector<T>> 中使用 lambda 函数进行散列

jquery - 使用nodejs express的ajax帖子的CSRF token 不匹配

asp.net-core - ASP.NET 核心 : why must we use FromBodyAttribute to hydrate a parameter from a json payload during a POST request?

php - 生成的 CSRF token 太多(PHP),我该如何处理?

Javascript字符串包含 "&nbsp"无法匹配

javascript - React Ajax 请求给出 CORS 错误但返回数据

JavaScript:从字符串中提取坐标

xml - PowerShell:带有 ConvertTo-XML 输出的自定义属性 XML 标签

ruby-on-rails - rspec 分配将哈希键转换为字符串