Gac*_*cci 4 javascript php http jwt
关于JWT和CSRF合作,我仍然不清楚.我理解JWT的基本原理(它是什么以及它是如何工作的).当与会话一起使用时,我也理解CSRF.同样地,我知道将JWT存储在localStorage中存在风险,这就是您需要csrf令牌的原因.所以我的问题是,我如何使用它们.为简单起见,我说我有一个登录页面.
1)我有用户登录,一旦消费了电子邮件和密码,如果用户通过身份验证,服务器将发送CSRF,并将使用JWT存储httpOnly cookie(如何使用PHP设置cookie).我的理解是你可以使用,header('Set-Cookie: X-Auth-Token=token_value; Secure; HttpOnly;');请确认是否这样做.
2)一旦我用JWT设置了cookie.我如何使用后续请求发送CSRF令牌>从我的理解,您将它们设置在标题中.因此,如果我正在发出Ajax请求,我会将它们放在标题中.
3)一旦发出请求并且CSRF令牌与请求一起发送.如何进行验证.我在比较什么?
最后,这是否安全实施!
如果您能尽可能多地包含详细信息,我将非常感谢.
我自己看过和使用过的一种方法是将CSRF令牌包含在JWT中作为声明.因此,当用户发送用户名和密码时,您可以执行以下操作:
HTTPOnly包含JWT 的cookie来响应客户端的身份验证请求.这可确保只有浏览器(不是客户端应用程序和可能的恶意脚本)才能访问JWT.设置cookie也是个好主意secure.如果使用不安全的通信通道(即不是https),这可以防止浏览器发送cookie.我建议你观看关于JWT的这个话题.它详细介绍了相同的方法(也有很好的图表).请随意观看整个演讲,或者如果您对CSRF特别感兴趣,请从36:29开始.
以下是幻灯片(来自上面链接的演示文稿),演示了JWT和CSRF令牌如何一起使用.我用红色数字注释它,对应上面的清单.

fel*_*osh -1
防御 CSRF 的常见范例是为每个“表单”生成一个令牌,并验证为特定表单设置的令牌是否正确。
这样,攻击者就无法猜测令牌,因此无法制作发送到您的服务器的外部表单。
通常,设置该令牌的方法是通过Cookie,客户端应用程序会将其附加到某个自定义标头,这将为您提供额外的保护,然后,服务器应该比较 cookie 值和标头值。
重要的是,令牌仅对一个会话有效,否则,攻击者可以重复使用他在攻击向量中获得的相同令牌。
JWT 是一种向系统验证用户身份的方法,而不是验证请求是否有效。
我将尝试通过示例进行解释,假设您没有实施任何针对 CSRF 的保护,但您确实有一种机制来验证您的用户(使用 JWT),因此用户使用正确的用户名和密码登录,您的服务器会发送一个JWT,客户端会将其保存到localStorage/内存中。现在,攻击者可以在他的网站上制作一个指向您的服务器的表单,假设他知道用户的 JWT 令牌(他通过 MITM 等其他方法获得了它),他所需要做的就是欺骗用户进入他的网站带有表单的页面,如果有任何问题,表单将发送给您,您的服务器将接受请求,攻击就会成功。
如果您实现任何 CSRF 机制,示例中的攻击者将无法猜测当前令牌,因此您的服务器将忽略他的请求。
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |