coigniter curl如何发送CSRF令牌?



我在另一个页面上用curl填充表单时遇到了麻烦。如何下载和插入CSRF令牌在Codeigniter?在不使用CSRF的情况下,添加表单没有任何问题。CSRF看起来像这样:

<input type="hidden" name="csrf_test_name" value="795e736ebd33938c7371e50b2085f6d7" />   

整个旋度代码是这样的

$curl_connection = 
curl_init('http://localhost/form');
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, APPPATH . '/cookies.txt');
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, APPPATH . '/cookies.txt');

$result = curl_exec($curl_connection);
$doc = new DOMDocument();
$doc->loadHTML($result);
$token = $doc->getElementById("csrf_test_name")->attributes->getNamedItem("value")->value;
$post_data['title'] = 'Myname';
$post_data['csrf_test_name'] = $token;
$post_data['email'] = 'my@email.com';

foreach ( $post_data as $key => $value) {
$post_items[] = $key . '=' . $value;
}
$post_string = implode ('&', $post_items);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
$result = curl_exec($curl_connection);
print_r(curl_getinfo($curl_connection));
echo curl_errno($curl_connection) . '-' . 
curl_error($curl_connection);

curl_close($curl_connection);
}

我是curl主题的初学者,谁能帮助我如何阅读这个csrf?谢谢你的帮助。

我已经测试了这个,工作:

首先,您需要将名称更改为id:

<input type="hidden" id="csrf_test_name" value="795e736ebd33938c7371e50b2085f6d7" /> 

因为您使用的是getElementById("csrf_test_name")

其次,您需要像这样获取属性值:

$token = $doc->getElementById("csrf_test_name")->getAttribute('value');

如果没有其他错误,应该不会有问题。

注:您在这里使用了PHP XML DOM解析器,但通常对于这种工作使用PHP简单HTML DOM解析器。为什么?因为我们正在解析HTML:)

如果数据是XML,那么我们将讨论节点,我们可以像这样以更清晰的方式获取值:

$token = $doc->getElementById("csrf_test_name")->nodeValue;

相关内容

  • 没有找到相关文章

最新更新