我有一个Angular应用程序向PHP服务器发出$ http请求。一旦有效的登录请求被提交给服务器,PHP就会创建一个JWT和 使用PHP的setcookie()函数设置令牌cookie,并将httponly标志设置为true。此标志仅允许服务器读取cookie。在每个后续的Angular $ http请求中,PHP使用$ _COOKIE验证cookie。
我的问题是在PHP中设置cookie只是为了让服务器从CSRF中读取足够安全,或者我是否需要让Angular创建一个额外的XSRF令牌以便在每个要评估的请求上发送?
我阅读了下面的Stormpath article,但是为什么他在JWT有效载荷中设置xsrfToken有点遗失。我的猜测是让Angular创建一个XSRF令牌来匹配。
感谢您的任何建议/意见。
答案 0 :(得分:2)
CSRF攻击的工作原理是利用每个请求自动将浏览器发送到服务器的身份验证cookie。通常,JWT不会使用cookie传递给服务器,而是传递给http请求的身份验证标头(它可能存储在客户端的cookie中,但cookie不用于将JWT传递给服务器)。由于您需要为每个请求设置身份验证标头,因此CSRF攻击无法对其恶意请求进行身份验证,因为浏览器不会自动为每个请求发送身份验证Cookie。这就是为什么JWT有助于防止CSRF攻击的原因。
也就是说,如果您将JWT存储在cookie中并来回传输cookie,提取令牌以检查授权策略,那么您就像标准cookie身份验证一样容易受到CSRF的影响。在这种情况下,您可以在请求中添加防伪标记,以确保您的服务器收到的任何HTTP请求都直接来自您的网站。