将CSRF令牌发送到javascript

时间:2015-01-26 20:19:47

标签: php javascript csrf

假设我在会话中在服务器端维护一个反CSRF令牌

如果我的表单生成将是动态的,那么我应该如何将令牌传递给客户端应用程序(即在javascript执行某些操作后将创建表单)

有没有办法将令牌传递给javascript,以便我可以在表单中注入令牌。

我找到的一种工作方式是将cookie发送到包含令牌的浏览器,然后通过javascript提取该令牌。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我建议从安全令牌开始,然后根据动态表单创建通过JavaScript进行改进。

例如,像:

<input type="hidden" name="csrftoken" value="hgdillksdbgjksdbkvbskb">

&#34;值&#34;页面加载时,在服务器端生成参数。

然后你有一个像:

这样的剧本
csrftoken = document.mainform.csrftoken.value;
# Do something with the CSRF token, like add dynamic values, like sha256(csrftoken + "dynamicvalue");
document.mainform.csrftoken.value = csrftoken;

这个的主要思想是防止,即使他们设法获得允许广告人阅读JavaScript代码的漏洞,他们仍然无法构成有效的CSRF令牌,因为他们无法阅读原始的& #34; csrftoken&#34;页面加载时表单内的值。 这也可以用于&#34;链&#34; AJAX请求,就像您在页面加载期间使用令牌X开始一样。然后使用JavaScript将其转换为Y,并在AJAX请求中发送它。在下一个AJAX请求中,您可以在算法中使用Y作为基础,创建Z,并发送到服务器。攻击者无法访问X,因此他们既不能访问Y也不能访问Y,即使他们在某种程度上能够利用正在运行的JavaScript代码来展示自己。

请注意,由于相同的来源政策,广告无法读取网页内容。但Javascript可以包含一些漏洞,可以读取实际运行的JavaScript代码。目前没有这样的漏洞,但最好是安全而不是抱歉。

答案 1 :(得分:0)

不确定。如果您在客户端动态生成表单,那么您可以从某种模板中执行此操作。令牌应该是该创建函数的参数。

在请求/渲染时将令牌传递给客户端,然后在表单生成时将其作为隐藏元素注入表单。