【发布时间】:2011-03-19 22:59:29
【问题描述】:
我正在开发一个完全由 ajax 驱动的应用程序,其中所有请求都通过基本上相当于一个主控制器的东西,它的基本结构看起来像这样:
if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
fetch($page);
}
这通常足以防止跨站点请求伪造吗?
当每次请求都没有刷新整个页面时,使用旋转令牌是相当不方便的。
我想我可以在每个请求中将唯一令牌作为全局 javascript 变量传递和更新——但不知何故,这感觉很笨拙,而且似乎天生不安全。
编辑 - 也许静态令牌,如用户的 UUID,总比没有好?
EDIT #2 - 正如 The Rook 所指出的,这可能是一个令人毛骨悚然的问题。我已经阅读了两种方式的猜测,并听到了关于旧版本的闪存可用于这种恶作剧的传言。由于我对此一无所知,因此我悬赏任何能够解释这是 CSRF 风险的人。否则,我会把它交给 Artefacto。谢谢。
【问题讨论】:
-
据此记录,Artefacto 是正确的。您应该阅读浏览器安全手册,而不是询问 SO。 SO上的许多答案都是不正确的,尤其是对于像这样的头发分裂话题。
-
在旧版本的闪存中确实有一些vulnerabilities。但是,对于确实运行这些旧版本 Flash 的用户,我会说 CSRF 攻击是他们面对任意代码执行漏洞时的较小问题。
标签: php ajax security token csrf