【问题标题】:How to deal with CSRF (I guess)?如何处理 CSRF(我猜)?
【发布时间】:2011-05-09 04:59:03
【问题描述】:

例如,在 admin cp 中,要删除用户,有一个链接 - http://example.com/acp/delete-user.php?id=102 。打开链接时,系统会自动从数据库中删除该用户。 想象一下,有人给我发了一个链接(像那样),我不小心打开了它。这意味着,我在不知情的情况下删除了该用户。 =(如何处理?POST方法?一些token?具体怎么做。我只是在学习。=P

【问题讨论】:

    标签: php security forms csrf


    【解决方案1】:

    我希望您有一个身份验证系统,因此您甚至需要登录才能访问该链接。

    【讨论】:

    • 这不是 CSRF 的问题。假设您是网站的管理员并且您已登录。我给您发送一个链接并说嘿!点击这里!。它将向您发送网站,并且由于您的身份验证,您几乎可以做任何事情!
    【解决方案2】:

    我建议您使用 FORM 来执行此类操作。 http://example.com/acp/delete-user.php?id=102 显示一个带有 DELETE 按钮和一个带有随机生成密钥的 HIDEN INPUT 的表单。该值存储在服务器端的会话中。当您点击提交时,目标页面将检查您是否输入了正确的密钥。

    网上有很多关于CSRF的资源。

    【讨论】:

    • 是的,随机生成的密钥是要走的路!看我发的文章。 :)
    【解决方案3】:

    你看过this article。正如其他人所说,我希望您对所有内容都进行身份验证。但要正确实施,您需要实施令牌服务。因为如果您已登录并且我将链接发送给您,那么它将删除该用户。

    【讨论】:

      【解决方案4】:

      实际上,使用 POST 只会让攻击者更加困难(不过,使用 POST 会更好)。

      您应该生成一个随机令牌并将其存储在用户的会话或数据库中(为用户)。在执行任何操作之前,您必须检查是否存在正确的令牌。如果您将其存储在会话中,请记住也要保护您的会话。

      您可以在此处找到一种实现方式:http://www.serversidemagazine.com/php/php-security-measures-against-csrf-attacks

      【讨论】:

        猜你喜欢
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 2018-07-17
        • 2017-04-16
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        相关资源
        最近更新 更多