Codeigniter curl 如何发送 CSRF 令牌?
Codeigniter curl how to send CSRF token?
我在使用 curl 填写另一页上的表单时遇到问题。如何在 Codeigniter 中下载并插入 CSRF 令牌?在不使用 CSRF 的情况下,添加表单没有任何问题。 CSRF 看起来像这样:
<input type="hidden" name="csrf_test_name" value="795e736ebd33938c7371e50b2085f6d7" />
我的整个 curl 代码如下所示
$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?在此先感谢您的帮助。
我已经测试过了,有效:
首先需要将name改成id:
<input type="hidden" id="csrf_test_name" value="795e736ebd33938c7371e50b2085f6d7" />
因为您正在使用 getElementById("csrf_test_name")
。
其次,你需要像这样获取属性值:
$token = $doc->getElementById("csrf_test_name")->getAttribute('value');
除非出现其他错误,否则你应该没问题。
P.S. 你在这里使用过 PHP XML DOM Parser 但通常用于这种工作 PHP Simple HTML DOM Parser被使用。为什么?因为我们正在解析 HTML :)
如果数据是 XML,那么我们将讨论节点,我们可以像这样以更清晰的方式获取值:
$token = $doc->getElementById("csrf_test_name")->nodeValue;
我在使用 curl 填写另一页上的表单时遇到问题。如何在 Codeigniter 中下载并插入 CSRF 令牌?在不使用 CSRF 的情况下,添加表单没有任何问题。 CSRF 看起来像这样:
<input type="hidden" name="csrf_test_name" value="795e736ebd33938c7371e50b2085f6d7" />
我的整个 curl 代码如下所示
$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?在此先感谢您的帮助。
我已经测试过了,有效:
首先需要将name改成id:
<input type="hidden" id="csrf_test_name" value="795e736ebd33938c7371e50b2085f6d7" />
因为您正在使用 getElementById("csrf_test_name")
。
其次,你需要像这样获取属性值:
$token = $doc->getElementById("csrf_test_name")->getAttribute('value');
除非出现其他错误,否则你应该没问题。
P.S. 你在这里使用过 PHP XML DOM Parser 但通常用于这种工作 PHP Simple HTML DOM Parser被使用。为什么?因为我们正在解析 HTML :)
如果数据是 XML,那么我们将讨论节点,我们可以像这样以更清晰的方式获取值:
$token = $doc->getElementById("csrf_test_name")->nodeValue;