很多站长朋友们都不太清楚php获取csrf,今天小编就来给大家整理php获取csrf,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 「编程工具」PHP 开源框架 MiniFramework 发布 2.0.0 版 2、 php csrf攻击是通过浏览器还是直接攻击接口的 3、 如何用php获取某个页面中的input的csrf 「编程工具」PHP 开源框架 MiniFramework 发布 2.0.0 版MiniFramework 是一款遵循 Apache2 开源协议发布的,支持 MVC 和 RESTful 的超轻量级 PHP 开发框架。MiniFramework 能够帮助开发者用最小的学习成本快速构建 Web 应用,在满足开发者最基础的分层开发、数据库和缓存访问等少量功能基础上,做到尽可能精简,以帮助您的应用基于框架高效运行。
MiniFramework于2019年6月11日发布2.0.0版本,变化有:
* 重构框架核心架构,按功能模块划分目录和命名空间。
* 新增命名空间Mini\Base,用于框架基础类库。
* 新增命名空间Mini\Cache,用于缓存类库。
* 新增命名空间Mini\Captcha,用于验证码等人机识别校验类库。
* 新增命名空间Mini\Db,用于数据库操作类库。
* 新增命名空间Mini\Helpers,用于全静态助手类库。
* 新增常量CSRF_TOKEN_ON,默认值为TRUE,用于控制防御CSRF跨站请求伪造攻击功能的开启和关闭。
* 新增方法Mini\Base\Request::checkCsrfToken(),用于校验客户端传入CSRF-Token。
* 新增方法Mini\Base\Request::createCsrfToken(),用于生成一个新的CSRF-Token。
* 新增方法Mini\Base\Request::getCsrfParamName(),用于获取CSRF-Token存储键名。
* 新增方法Mini\Base\Request::loadCsrfToken(),用于读取CSRF-Token。
* 新增方法Mini\Helpers\Safe::getCsrfToken(),用于随时获取当前存储于Server端的CSRF-Token。
* 改进Mini\Db类库,支持原有工厂模式调用和直接调用MySQL类Mini\Db\Mysql两种模式并存。
* 改进Mini\Cache类库,支持原有工厂模式和直接调用File、Memcache、Memcached和Redis类两种模式并存。
* 创建框架核心代码仓库 用于正式版本发布。
* 完善用于演示的应用示例App。
* 完善Composer配置,更好的支持在项目中通过Composer引入框架进行编码。
* 完善代码注释。
MiniFramework 2.0.0 版本下载地址
zip格式:
tar.gz格式:
MiniFramework 快速入门文档
地址:
近期版本更新主要变化回顾:
1.5.2
* 新增全局函数htmlEncode(),用于转换特殊字符为HTML实体字符,便于防范XSS攻击。
* 更新composer.json中定义的包名,从命名上与Github的仓库名称保持一致。
php csrf攻击是通过浏览器还是直接攻击接口的CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
跨站通常指的是针对浏览器来说的,如果通过其他方式直接调接口,不存在跨站一说,HTTP协议本身并没有站这一概念。伪造请求必然会将所有的条件都设置正确(如referrer和csrf token),没有任何限制,对后端来说,请求必然是一个正确的。
如何用php获取某个页面中的input的csrf好问题,我这里有最好的答案。
composer包:
"symfony/css-selector": "3.1.*",
"symfony/dom-crawler": "3.1.*",
"guzzlehttp/guzzle": "6.2.*"
php代码
$body = (new \GuzzleHttp\Client)->get('')->getBody()->getContents();
$csrf = (new \Symfony\Component\DomCrawler\Crawler($body))->filter('#csrf_token')->attr('value');
var_dump($csrf);
另外,下一步应该是POST登录吧?
$res = (new \GuzzleHttp\Client)->post('', ['connect_timeout' => 10,
'form_params' => [
'csrf_token' => $csrf,
'email' => 'xxx',
'password' => 'xxx',
],
]);
// 登陆后拿到的html
$body = $res->getBody()->getContents();
$dom = new \Symfony\Component\DomCrawler\Crawler($body);
// 检查是否登录失败并抛出异常
if ($err_str = $dom->filter('.email-warn')->text()){
throw new \Exception($err_str);
}
补充
对了,忘了说了,csrfToken是和session相关的,如果你获取csrf和登录post用的不是一个sessionid的话,csrf是无效的。所以,获取csrf和post登录请共用这一个client以共享同一个cookie。
$client = new Client(['cookies'=>true]);
把上面代码里的(new \GuzzleHttp\Client)换成$client即可
关于php获取csrf的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php获取csrf php获取农历日期的详细内容...