如何使用JQuery AJAX实现通用CSRF令牌?

时间:2011-12-05 21:59:48

标签: php javascript jquery ajax csrf

我目前正在开发jquery代码,它通过ajax将数据发送到服务器,然后根据请求参数将数据插入到数据库中。

然而,我担心这可能会被CSRF攻击所滥用,这会使事情变得相当不安全。我试图研究这个并且只找到特定框架的答案,例如django和rails,其中我只是在用于PHP的通用实现之后。

我已经读过你可以使用JQuery.ajaxsend()函数来实现代码,以便用每个AJAX请求发送一个令牌但是我不知道如何实现它,因为JavaScript显然无法访问PHP会话变量。 Cookie的使用是否足够安全?

基本上我需要能够检查请求的来源,以确保请求是真实的,而不是用于利用系统的伪造请求。

如果有人能指出我正确的方向,那将是最受欢迎的!

2 个答案:

答案 0 :(得分:1)

嗯,确实知道$.ajax似乎发送了cookie,包括PHP会话cookie,以及它的请求。使用该功能可以将您的攻击从CSRF更改为会话劫持,但这是一个开始。接下来,如果可以避免会话劫持,请通过SSL运行服务。

我确信还有其他方法可以做到这一点,但对于vanilla PHP,这似乎有效。如果我错了,请有人纠正我。

答案 1 :(得分:1)

这是在Django中完成的,但没有任何特定的框架(除了将cookie中的CSRF令牌设置为'csrftoken'):https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax