Angular和PHP JWT以及CSRF(XSRF)Cookies

Angular和PHP JWT以及CSRF(XSRF)Cookies,php,angularjs,csrf,jwt,Php,Angularjs,Csrf,Jwt,我有一个Angular应用程序向PHP服务器发出$http请求。一旦向服务器提交了一个有效的登录请求,PHP就会创建一个JWT和 使用PHP的setcookie()函数将令牌cookie设置为httponly标志设置为true。此标志仅允许服务器读取cookie。在每个后续的$http请求中,PHP使用$\u cookie验证cookie 我的问题是,在PHP中仅为服务器设置cookie以便从CSRF读取是否足够安全,或者我是否需要创建一个额外的XSRF令牌,以便在每个要评估的请求上发送 我读了

我有一个Angular应用程序向PHP服务器发出$http请求。一旦向服务器提交了一个有效的登录请求,PHP就会创建一个JWT和 使用PHP的setcookie()函数将令牌cookie设置为httponly标志设置为true。此标志仅允许服务器读取cookie。在每个后续的$http请求中,PHP使用$\u cookie验证cookie

我的问题是,在PHP中仅为服务器设置cookie以便从CSRF读取是否足够安全,或者我是否需要创建一个额外的XSRF令牌,以便在每个要评估的请求上发送

我读了下面的内容,但对他为什么在JWT负载中设置xsrfToken有点迷茫。我的猜测是让Angular创建一个XSRF令牌来匹配


感谢您的建议/输入。

CSRF攻击利用浏览器随每个请求自动将身份验证cookie发送到服务器这一事实进行攻击。通常,JWT不会使用cookie传递到服务器,而是在http请求的身份验证头中传递(它可能存储在客户端的cookie中,但cookie不用于将JWT传递到服务器)。由于需要为每个请求设置身份验证标头,因此CSRF攻击无法对其恶意请求进行身份验证,因为浏览器不会随每个请求自动发送身份验证cookie。这就是JWT帮助防止CSRF攻击的原因


也就是说,如果您将JWT存储在cookie中,并来回传输cookie,提取令牌以检查授权策略,那么您与标准cookie身份验证一样容易受到CSRF攻击。在这种情况下,您可以向请求中添加防伪令牌,以确保服务器收到的任何HTTP请求都直接来自您的网站。

谢谢您的回答。我在一个PHP cookie中设置JWT,并使用PHP$_cookie['token']访问它,以对每个请求进行身份验证,根据您的回答,这确实会导致CSRF攻击的可能性。所以我猜测,除了JWT cookie之外,通过传递存储在cookie中的XSRF令牌,并将其传递到请求头中,并在PHP中验证它,这将消除CSRF攻击的可能性?正确。在您的请求中添加防伪令牌和cookie(并验证它们)将保护您免受XSRF攻击,将包含JWT的cookie设置为HttpOnly将保护该cookie免受XSS攻击。我非常确定情况确实如此。再次感谢您的确认。