会话用户数据无法使用curl获取数据

时间:2019-08-23 05:02:20

标签: php codeigniter curl

我想实施CSRF攻击并将链接代码发送给用户。该网址用作更改密码用户。

在此CSRF实施攻击中,黑客使用curl发送伪造的url帖子,并发送参数'password'来更改密码用户目标。

攻击目标代码

<?php
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
                 "password=12345&re_password=12345");
curl_setopt($ch, CURLOPT_URL, 
                 "http://localhost/onlineshop/change-password/forgot");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch);      
echo $output;

功能中忘记密码

<?php
function forgot() {
    var_dump($this->ci->session->userdata('user_info'));
}

来自伪造的URL会话user_id = 0,但是我从这个URL http://localhost/onlineshop/change-password/forgot id = 1进行检查

为什么会话无法从假网址获得会话?

2 个答案:

答案 0 :(得分:0)

在进行CI会话时可能会有问题:

$arr_user['user_info']['id'] = 2 //any dummy value
// Add user data in session
$this->session->set_userdata($arr_user);

现在要检查并确定,请通过执行print_r($_SESSION);

对其进行调试

现在在所需页面上,尝试以下操作:

print_r($this->session->userdata); 

OR

print_r($this->session->all_userdata());

您将当前启用所有值。 另外,请确保您已在页面上启用会话。

忘记了要在哪里返回数据,

<?php

    function forgot() {
        $session_data = $this->ci->session->userdata('user_info');
       echo json_encode($session_data);
    }

答案 1 :(得分:0)

Curl请求无法进行会话,因为它是通过HTTP发出的请求,并且会话始终保持在用户系统上。因此,首先,您必须制定强大的逻辑并编写程序来保持该状态的保护,您无法使用Curl检查csrf。您做的方式不是一个好方法。

您应该在令牌重置密码链接中设置一个令牌,并确保每当用户单击该令牌重置密码并确保密码始终有效。