Javascript 如何在java脚本中获取会话id
目前,我被要求在我们的web应用程序中防止CSRF附加。 我不熟悉web应用程序 有人能帮我吗 给了我一条指导线 实现此修复的一个简单方法是使用两个额外的隐藏变量呈现每个页面Javascript 如何在java脚本中获取会话id,javascript,hash,csrf,Javascript,Hash,Csrf,目前,我被要求在我们的web应用程序中防止CSRF附加。 我不熟悉web应用程序 有人能帮我吗 给了我一条指导线 实现此修复的一个简单方法是使用两个额外的隐藏变量呈现每个页面 var1 = hmac_sha256(timestamp+session_id, secret) var2 = timestamp 在后端,您获取时间戳,并通过使用时间戳创建服务器端机密的hmac来验证它。如果有效,并且时间尚未过去,则可以允许请求继续。这允许您设置页面的过期时间并对其创建进行身份验证,从而减轻跨站点请求
var1 = hmac_sha256(timestamp+session_id, secret)
var2 = timestamp
在后端,您获取时间戳,并通过使用时间戳创建服务器端机密的hmac来验证它。如果有效,并且时间尚未过去,则可以允许请求继续。这允许您设置页面的过期时间并对其创建进行身份验证,从而减轻跨站点请求伪造攻击。同一有效令牌不能使用两次
我已经确定了做同样事情的步骤
var$csrfToken=hmac\u sha256($timestamp+$seesionId+$mySecretKey)
var$stringToHash=request.get('key')
var$isValidToken=hmac_sha256($timestamp+$seesionId+$mySecrtKey)==request.get('csrfToken')
任何人都可以帮我处理代码片段。我们使用的过程是在
元素中存储csrf令牌(由服务器生成,即生成它的位置,而不是在客户端。这是一种跨站点请求伪造预防机制,因此服务器需要能够验证它是真正的令牌,而不是客户端)(这是一个W3C验证名称),然后在使用jQuery的beforeSend
进行AJAX调用时将其作为请求头传递:
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
,因为我们将nodejs与express一起使用,express使用connect,这需要特定的字符串。我们使用的过程是存储CSRF令牌(由服务器生成,而不是在客户端生成。这是一种跨站点请求伪造预防机制,因此服务器需要能够在
元素(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
,因为我们将nodejs与express一起使用,后者使用connect,这需要特定的字符串。是否正确执行CSRF可能是另一篇文章的讨论内容。您最初的问题是如何在Javascript中获取会话Id。会话Id are通常存储为Cookie,但根据服务器的不同而命名
- JEE=JSESSIONID
- PHP=PHPSESSID
- ASP=ASPSESSIONID
然后,您可以使用库访问正确的cookie并获取会话id。您是否正确执行CSRF可能是另一篇文章的讨论内容。您最初的问题是如何在Javascript中获取会话id。会话id通常存储为cookie,但根据服务器的不同而命名。来自上的维基百科页面
- JEE=JSESSIONID
- PHP=PHPSESSID
- ASP=ASPSESSIONID
然后,您可以使用库来访问正确的cookie并获取会话id。如果您列出正在使用的服务器,我很确定我们可以指出已经存在的CSRF框架。您不在客户端生成CSRF,而是在服务器上生成。如果您将服务器机密发送给客户端,则任何mo都不是机密我使用tomcat服务器,我的web应用程序使用jsp和servlet。所有请求都是POST方法类型。我使用ajax调用将请求发送到sevlet,servlet发送回json响应以呈现动态页面(客户端使用pure.js)要呈现servletCSRF的json响应,无论如何应该只在POSt/PUT/DELETE中使用,所以这很好。Tomcat内置了CSRF,如果您列出了正在使用的服务器,我很确定我们可以指出已经存在的CSRF框架。您不在客户端生成CSRF,而是在服务器上生成它们。如果您是se将服务器机密发送给客户端,它不再是机密了?我使用tomcat服务器,我的web应用程序使用jsp和servlet。所有请求都是POST方法类型。我使用ajax调用将请求发送给sevlet,servlet发送回json响应以呈现动态页面(客户端使用pure.js)要呈现servletCSRF的json响应,不管怎样,都应该只在POSt/PUT/DELETE中启动,这很好。Tomcat内置了CSRF,请重新启动,感谢您的回复。在这种情况下,我们必须执行服务器端验证字符串CSRF_token_request=request.getHeader(“X-CSRF-token”);if(serverCsrfToken==CSRF_token_request){continue;}else{return;}感谢您的回复。在这种情况下,我们必须执行服务器端验证字符串csrf_token_request=request.getHeader(“X-csrf-token”);if(serverCsrfToken==csrf_token_request){continue;}else{return