由于 CSRF 令牌存储在网站的前端,是否可以使用某些脚本访问它们,或者它们是否是人类可读的。此外,攻击者的恶意脚本是否可以从合法用户的浏览器访问 CSRF 令牌,并发送攻击者想要的新请求。如果是,我们如何确保它?
致力于在我的系统中实现 CSRF 令牌。
由于 CSRF 令牌存储在网站的前端,是否可以使用某些脚本访问它们,或者它们是否是人类可读的。
是的,当然。人类可读与否无关紧要...唯一相关的部分是提交表单时可以将正确的数据发送回服务器。通常,这只是一些文字值,但也可以在客户端计算。无论哪种方式,都有可能获得客户端。
此外,攻击者的恶意脚本是否可以从合法用户的浏览器访问 CSRF 令牌,并发送攻击者想要的新请求。
是的,当然。无论如何,谁能说清楚什么是“合法”用户呢?当然代码无法确定这一点。您必须围绕您(人类)认为合法的内容构建一个系统。
如果是,我们如何确保它?
CSRF 攻击与验证请求是否来自人类用户或脚本无关。这不是 CSRF 代币试图解决的问题。
CSRF 令牌的唯一用途是防止来自其他源(或者更确切地说,无法获取令牌的源)的请求代表合法源上的用户提交数据。这曾经是一个问题,依赖 cookie 进行身份验证,但当发布来自不同来源的表单时,会提交 cookie。坦率地说,如果您以不依赖 cookie 进行身份验证的方式构建 API,并且如果您使用正确的方法(如
PUT
和 POST
)来更改数据,那么您就不会这样做没有问题需要担心。