如何在java脚本中获取会话id

how to get session id in java script

本文关键字:获取 会话 id 脚本 java      更新时间:2024-03-03

目前我被要求在我们的web应用程序中阻止CSRF连接。我是web应用程序的新手。

有人能帮我处理这个吗

引导线我已经得到

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

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

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

我已经确定了采取同样措施的步骤。

  1. 在java脚本中生成会话id
  2. 在服务器端(servlet)生成密钥
  3. 将密钥从服务器发送到客户端(可能在登录页面中)
  4. 通过时间戳、seesion-id和密钥生成,使csrf令牌保持隐藏状态。

    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令牌(由服务器生成,这是生成它的地方,而不是在客户端中。这是一种跨站点请求伪造防止机制,因此服务器需要能够验证它是真实的令牌,而不是客户端)存储在<meta name="csrf-token" value="...">元素(这是W3C验证名称)中,然后在执行AJAX时将其作为请求头传递使用jQuery的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);
  },
  ...
});

在这种情况下,服务器需要将头作为X-CSRF-Token,因为我们使用的是带有express的nodejs,它使用connect,这需要特定的字符串。

你是否正确进行CSRF可能是另一篇文章的讨论。您最初的问题是如何在Javascript中获取会话Id。会话ID通常存储为cookie,但根据服务器的不同命名不同。来自会话Id上的维基百科页面。

  • JEE=JSESSIONID
  • PHP=phpsessiond
  • ASP=ASPSESSIONID

然后,您可以使用类似jquerycookie的库来访问正确的cookie并获取会话id。