Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过发送validatecookie作为参数来保护网站不受CSRF的影响?_Php_Ajax_Cookies_Csrf - Fatal编程技术网

Php 通过发送validatecookie作为参数来保护网站不受CSRF的影响?

Php 通过发送validatecookie作为参数来保护网站不受CSRF的影响?,php,ajax,cookies,csrf,Php,Ajax,Cookies,Csrf,据我所知,CSRF-攻击的工作原理如下: 当您检查用户是否登录到您的网站时,您会检查是否设置了验证cookie,并与数据库匹配 第三部分将用户发送到您网站中的站点,例如“changePassword.php” 网站“changePassword.php”将通过检查cookie是否与数据库匹配来检查用户是否登录,如果设置了cookie,页面将“更改密码”它是在您在另一个选项卡中登录网站后设置的,因此密码将被更改 为防止此网站使用网页随机生成并存储为会话的令牌,然后网页将此令牌与请求一起作为参数发送

据我所知,CSRF-攻击的工作原理如下:

  • 当您检查用户是否登录到您的网站时,您会检查是否设置了验证cookie,并与数据库匹配
  • 第三部分将用户发送到您网站中的站点,例如“changePassword.php”
  • 网站“changePassword.php”将通过检查cookie是否与数据库匹配来检查用户是否登录,如果设置了cookie,页面将“更改密码”
    它是在您在另一个选项卡中登录网站后设置的,因此密码将被更改
  • 为防止此网站使用网页随机生成并存储为会话的令牌,然后网页将此令牌与请求一起作为参数发送。因为这让网站知道用户确实访问了网站并执行了操作

    问题是: 而不是将标记作为参数发送。您能否将登录的cookie作为参数发送


    由于cookie是特定于webiste的,我看不到其他页面能够将此cookie作为参数发送到您的网站的方式。

    我发现了这不起作用的原因,如果您将cookie作为参数发送,攻击者总会有办法使用(jquery?)功能或类似功能。因此,您必须始终从网页获取令牌。您可以打印cookie,然后以这种方式获取,但将会话令牌作为网站的隐藏输入会更容易。

    是的,您可以,假设“登录cookie”是一个加密安全的会话标识符

    这种CSRF防御方法称为:

    双重提交Cookie定义为在两种情况下都发送一个随机值 cookie和作为请求参数,服务器验证 cookie值和请求值相等

    通常,该值与会话ID分开,但如果会话ID是静态的,则没有理由不使用它

    在CSRF攻击中,攻击者只能使用受害者的浏览器将受害者的cookie提交到目标站点。攻击者无法实际读取cookie值,也无法将该值的副本设置为POST参数。因此,双重提交cookies是一种很好的CSRF防御


    请注意,不建议使用GET参数,因为此值可能会泄漏。

    否,结果不一样。cookie在您绘制的情况下没有帮助,因为浏览器无论如何都会发送cookie,因为它与
    changePassword.php
    脚本的域相匹配。你需要有一些不是自动提供,而是手动提供的方法。第三方脚本无法猜测或接受给定的内容。网站将创建csrf和xsrf密钥,并在页面上设置它们,并将这些值发送到目标页面。由于该网站创建了密钥并将其存储,因此它将能够检查该值是否为真。如果有人发送“更改密码”请求,则可能值得要求他们重新输入用户名和密码,以便您知道是“所有者”实时执行该操作?@RyanVincent是的,这将发生在页面中,但是随后一个ajax调用将被发送到一个单独的php页面,该页面将更改数据库中的密码。此ajax调用需要知道请求是从网站发送的。攻击者也可以使用JavaScript。jQuery不是新的JavaScript。还可以读取隐藏的输入(并使用XSS发送给攻击者)。我建议说“为用户绑定一个唯一的值,该值在每次请求时都会更改”——即:令牌。