4-3csrf token详解以及常见的防范措施

2023-10-17 15:30

本文主要是介绍4-3csrf token详解以及常见的防范措施,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(2)CSRF案例演示及防范

 CSRF(post)实验演示和解析
 Anti CSRF token
 常见CSRF防范措施

Token是如何防止CSRF的?

CSRF的主要问题是敏感操作的链接容易被伪造,那么如何让这个链接不容易被伪造?
-每次请求,都增加一个随机码(长度要够,需要够随机,不容易伪造),后台每次对这个随机码进行验证!

在这里插入图片描述

就是这个token值

Token是如何防止CSRF的?

Ant上CSRF(token)项目的token生成代码:

在这里插入图片描述

当我们每次请求修改页面的时候,后台会先去调用一个函数,在实际的系统里面,会写的更复杂一点,当我们去请求页面的时候,后台会去查一下session里面,有没有token,如果有的话,就把它销毁掉,然后生成一个新的token,赋值到session里面去,这样就实现了,当我们每次刷新页面的时候,都会去生成一个新的token,然后把这个token放到session里面,放到session里面,是为了下一次提交请求过来之后,给你进行对比,当然后台会把这个session值echo到前端,埋到页面去

CSRF(token)实验演示

我们选择csrf(token),点登录之后,我们可以把bp打开,抓一个包

在这里插入图片描述

我们看到这里有个get请求,复制下来

GET /pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=girl&phonenum=12345678922&add=1111&email=lucy%40pikachu.com&token=2245162ca799ea10a9787119296&submit=submit

,这个地方多出来token,这个token就是我们用来防止csrf的,因为我们每次请求这个token,都会发生变化

我们看一下,后端生成token,前端拿到token,你怎么提交到后端进行验证的,按F12,submit

在这里插入图片描述

每当我们打开页面的时候,它就会去访问token_get_edit.php,这个文件就会生成token,调用函数,将token,echo到前端

在这里插入图片描述

类型是隐藏的,前端通过肉眼是看不到的,其实在我们的代码里面,每当我们提交的时候,这个token会被提交到后台,它会对token进行验证,如果验过了,与当前生成的token相等,才会让我们提交,否则是不会让我们提交

如果小黑拿到lucy的token,因为这个token是随机的,也是唯一的,每个人的session对应的token都是不一样的,所以小黑用自己刷新出来的token给到lucy,是验不过去的,所以这个token是有效防止了csrf

在这里插入图片描述

如果你有提交,它会判断,你里面的内容是不是为空,你一定要满足,你提交过来的token跟我们session里面的token要相等,否则不会执行update操作

set_token();

每次我们去访问页面的时候,都会去调set_token

在这里插入图片描述

这个set_token是会把当前的session销毁掉,然后生成一个新的token在这个页面上

在这里插入图片描述

在每次请求的时候,直接echo到value里面去,这就实现了后端生成token,显示到前端,然后后端每次提交,前端显示验证,因为这个token跟session绑定的,随机的一个过程,攻击者是没法伪造的,这就是token防csrf的一个道理

防范措施

增加token验证(常用的做法):
1,对关键操作增加token参数,token值必须随机,每次都不一样;
关于安全的会话管理(避免会话被利用):
1,不要在客户端保存敏感信息(比如身份认证信息);
2,测试直接关闭,退出时的会话过期机制;
3,设置会话过期机制,比如15分钟内无操作,则自动登录超时;
访问控制安全管理:
1,敏感信息的修改是需要对身份进行二次认证,比如修改账号时,需要判断旧密码;
2,敏感信息的修改使用post,而不是get;

3,通过http 头部中的referer来限制原页面
增加验证码:
一般用在登录(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性)

这篇关于4-3csrf token详解以及常见的防范措施的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226303

相关文章

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求