【问题标题】:Protection from csrfcsrf 防护
【发布时间】:2013-11-12 08:35:43
【问题描述】:

我试图在 csrf protection 这里使用表单键方法 http://net.tutsplus.com/tutorials/php/secure-your-forms-with-form-keys/ 。但它仅适用于页面上的 1 个表单。我的问题是

假设我有一个表格

<form action="action.php" method="post">
<!-- code here -->
</form>

和我正在使用的我的 php

<?php
if(isset($_POST['submit']) && isset($_SESSION['user']))
{
//do something
}

我已经在使用session user 来确认他已登录,并且我的网站正在提交表单,因为我的网站上已经进行了会话。我也必须使用csrf保护方法吗?

【问题讨论】:

    标签: php forms csrf


    【解决方案1】:

    我也必须使用csrf保护方法吗?

    是的,因为这正是 CSRF 危险的原因; “受害者”的 cookie 在不知不觉中被发送到服务器以代表“黑客”在另一个网站上提交修改过的表单,伪装成可爱的小猫照片(例如)。

    当提交伪装的表单时,您的站点无法区分请求是否合法,因为身份验证将是有效的。添加 CSRF 令牌可确保表单是从您网站上的页面提交的。

    创建会话时,您还会生成一个 CSRF 令牌。然后,在会话期间,此令牌将用于您网站上的所有表单;这样做可以防止同时打开多个选项卡的问题。

    即使从您的页面复制表单(包括 CSRF 令牌),该令牌也会存储在不属于经过身份验证的用户的会话中。

    【讨论】:

    • 假设我使用会话方法生成表单密钥并将密钥发送到验证它的 php。现在的问题是,如果在两个选项卡中打开同一个页面并且我刷新新页面并关闭它。 The sesion variable changes。现在,当我在第一个选项卡上提交表单时。它总是会出错。有时用户会这样做open same page in 2 tabs。有没有其他安全的csrf保护方法?
    • @user2894116 — 创建会话时生成令牌,而不是每次加载表单时。
    • @Jack 道歉!! .这个 ajax 方法需要很多代码,因为我的页面上有很多表单。这里有没有其他代码更少且安全性相同的方式?
    • @Quentin 抱歉,明白了。我是新手。你能解释一下吗?
    • @user2894116 我在答案中添加了一个小解释。
    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 2018-05-27
    • 2012-10-08
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2019-02-03
    相关资源
    最近更新 更多