详解php curl带有csrf-token验证模拟提交方法

通常为了安全会在表单里加入一个随机的token值来防止csrf攻击。

要想模拟提交有token验证的网站其实也不难。

1.通过正则获取token 2.带上获取到的token模拟提交

下面是一个成功的例子

目录结构

rush:plain;"> │ form.PHP –需要模拟的表单 │ getForm.PHP – 模拟提交程序 │ post.PHP –表单验证程序 │ └─cookie – cookie存放目录

getForm.PHP

rush:PHP;"> PHP $cookie_file = './cookie/'.time().'.cookie'; $str = getResponse('http://a.curl.com:81/form.PHP',[],$cookie_file); setcookie("PHPSESSID","vc0heoa6lfsi3gger54pkns152"); preg_match('/$post['token'] = $match[1];
$post['name'] = '3333333';
$post['password'] = '12121213';
print_r(getResponse('http://a.curl.com:81/post.php',$post,$cookie_file));

function getResponse($url,$data=[],$cookie_file='',$timeout = 3)
{
if(empty($cookie_file))
{
$cookie_file = '.cookie';
}

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_REFERER,"https://www.baidu.com");  //构造来路
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/54.0.2840.59 Safari/537.36");

if(!empty($data))
{
  curl_setopt($ch,CURLOPT_POST,true);
  curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
}
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);// 取cookie的参数是
curl_setopt ($ch,CURLOPT_COOKIEFILE,$cookie_file); //发送cookie
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
try
{
   $handles = curl_exec($ch);
   curl_close($ch);
   return $handles;
}
catch (Exception $e)
{
  echo 'Caught exception: ',$e->getMessage(),"\n";
}
unlink($cookie_file);

}

form.PHP

rush:PHP;"> new document
PHP" method="post">

post.PHP

rush:PHP;"> PHP session_start(); if(empty($_POST['token'])) { exit ("token is empty!"); }

if(empty($_SESSION['token']))
{
exit ("session is empty");
}

if($_POST['token'] != $_SESSION['token'])
{
exit ("token ");
} else
{
unset($_SESSION['token']);
}

echo PHP_EOL;
echo "pass";
print_r($_REQUEST);

echo PHP_EOL;
print_r($_SERVER);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用