CSRF保护Drupal的主机
我有我需要从CSRF攻击保护,并有多个问题,一些PHP后脚本:
1)如果我使用jQuery没有一个HTML表单提交POST请求到PHP,仅仅是从HTML元素的CSRF的风险直接获取值和使用jquery提交他们,我还受?
2)当网站用户登录后,我存储在会话变量其独特的标记。在PHP脚本POST我检查如果会话变量被设置并具有我之前设置的值相同。难道这还不够?为什么它需要被包含在HTML表单令牌呢?

问11月15日在'14 23:43
- 是。不要紧,你如何构建请求,攻击者可以构造一个以同样的方式。 (理论上,你可以做一个复杂请求的功能(这将触发CORS预检要求)强制性的,因此其他网站无法获得用户的浏览器复制整个请求,但我不想依赖于) 。
- 没有
令牌的一点是要检查其包含负责决定在请求发生的事情的代码(即形式和JavaScript)的页面上你的网站的网页。
如果表单(或JavaScript),可以读取页面的HTML的标记(相匹配的会话中的一个),并把它的请求,那么你知道,构建请求的代码从您的网站来了。
如果你只是检查它是否在会话中,那么你正在检查是用户已致使产生一个令牌(这通常只是意味着访问您的网站...这可能是一个隐藏帧中的任何页面)。
好。怎么样,如果攻击者有一个JS可以包括从我的网站实际的HTML表单到隐藏的iframe。我已经在另一个例子中看到它,不会在令牌如果用户访问攻击者的网站,同时登录列入形式?在这种情况下,请求将是真实的令牌存在形式,并在会议上还是我失去了一些东西?迈克尔 - 塞缪尔11月15日在'14 23:58
不,如果你把框架的形式中,由框架加载页面字段将不会被包含在表单数据。您无法通过使用JavaScript框架看跨域数据(除非该网站使用于PostMessage,你不会是共同经营)。 - 昆廷 - 11月16日在'14 0:02
是的,它仍然是不安全
跨站请求伪造令牌应该是每次生成的表单时间新鲜生成的令牌。它需要对每个请求是唯一的和不可预知的。会话令牌从登录设定只适用于整个登录会话是唯一的。
如果你不发布生成的令牌来检查,你在哪里检查?你匹配会话令牌。究其原因,就是因为你仍然可以给人们做一个请求伪造的可能性,如果令牌不与请求本身发送的,但所有的检查都通过会话/饼干做。如果你只检查会话它针对CSRF什么。它需要在请求本身被发送,如果您的会话匹配检查。当您生成每个请求的唯一凭证,坏人无法伪造别人的请求。

回答11月15日在'14 23:55