我正在开发一个完全由 ajax 驱动的应用程序,其中所有请求都通过基本上相当于一个主控制器的东西,它的基本结构看起来像这样:
if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
fetch($page);
}
这通常足以防止跨站点请求伪造吗?
当每个请求都没有刷新整个页面时,拥有一个旋转令牌是相当不方便的。
我想我可以通过每个请求将唯一令牌作为全局 javascript 变量传递和更新——但不知何故,这感觉很笨拙,而且无论如何似乎天生就不安全。
编辑 - 也许像用户的 UUID 这样的静态令牌总比没有好?
编辑#2 - 正如The Rook指出的那样,这可能是一个令人毛骨悚然的问题。我已经阅读了两种方式的猜测,并听到了关于旧版本的闪存可用于这种恶作剧的传言。由于我对此一无所知,因此我悬赏任何能够解释这是 CSRF 风险的人。否则,我会把它交给Artefacto。谢谢。