首页 文章

PHP中的CSRF保护

提问于
浏览
1

我有一些PHP POST脚本,我需要保护它免受CSRF攻击,并有多个问题:

1)如果我使用没有HTML表单的jquery向PHP提交POST请求,只需直接从HTML元素获取值并使用jquery提交它们,我是否还有CSRF的风险?

2)当用户登录网站时,我将其唯一标记存储在会话变量中 . 在PHP POST脚本中,我检查该会话变量是否已设置并且具有我之前设置的相同值 . 还不够吗?为什么令牌也需要包含在HTML表单中?

谢谢

2 回答

  • 1
    • 是的 . 它没有让用户's browser to duplicate the whole request, but I wouldn' t想要依赖它 .

    • 没有

    令牌的要点是检查包含负责决定请求中的内容(即表单或JavaScript)的代码的页面是否是您网站上的页面 .

    如果表单(或JavaScript)可以从页面的HTML中读取令牌(与会话中的令牌匹配)并将其放入请求中,那么您就知道构建请求的代码来自您的站点 .

    如果您只是检查它是否在会话中,那么您要检查的是用户已经生成了令牌(这通常只是意味着访问您网站上的任何页面......可能位于隐藏的框架中) .

  • 3
    • 是的它仍然不安全

    • 每次生成表单时,CSRF令牌都应该是新生成的令牌 . 对于每个请求,它必须是唯一且不可预测的 . 从登录设置的会话令牌仅对整个记录的会话是唯一的 .

    如果您不发布生成的令牌进行检查,您在哪里检查它?您将会话令牌与...匹配?原因是因为如果令牌不是随请求本身一起发送的,你仍然可以给人们做伪造请求的可能性,但所有的检查都是通过session / cookies完成的 . 如果你只检查会话,它对csrf没有任何作用 . 它需要在请求中发送并检查它是否与您的会话匹配 . 当您为每个请求生成唯一令牌时,坏人无法伪造某人的请求 .

相关问题