CSRF(跨站请求伪造)原理:
CSRF是一种网络攻击方式,攻击者利用用户已登录的信任网站A的凭证(通常是Cookie),在用户不知情的情况下,诱使用户的浏览器向另一个网站B发送恶意请求。这种攻击之所以奏效,是因为浏览器会自动携带用户在A网站的认证信息(如Session Cookie)去访问B网站,而B网站会误以为该请求是用户自己发出的,从而执行攻击者期望的操作,如转账、修改密码等。
CSRF攻击的基本步骤如下:
- 用户正常登录受信任的网站A,并在本地生成Cookie。
- 在用户没有登出A网站或Cookie没有过期的情况下,用户访问了攻击者控制的恶意网站B。
- 网站B通过图片标签、隐藏表单、AJAX请求等手段,构造一个对网站A的请求,这个请求会携带A网站的有效Cookie。
- 浏览器在用户不知情的情况下,发送了这个请求到网站A,执行了攻击者预设的操作,如转账、修改密码等。
CSRF的解决方案:
为了防范CSRF攻击,可以采取以下几种策略:
-
Token验证:在敏感操作的表单中加入一个随机生成的、不可预测的Token,并在服务器端验证此Token。Token通常存储在服务器的session中,并在每次请求时生成一个新的Token,确保每次请求的唯一性。
-
SameSite Cookie属性:设置Cookie的SameSite属性为"Lax"或"Strict",可以有效防止跨站请求携带Cookie。特别是SameSite="Strict"可以完全阻止跨站发送Cookie,而"Lax"允许一些导航类型的跨站请求携带Cookie。
-
Referer检查:检查HTTP请求头中的Referer字段,确保请求是从预期的域名发起的。但这种方法并不总是可靠,因为Referer字段可以被伪造或缺失。
-
** CORS策略**:使用CORS(跨源资源共享)策略,通过设置Access-Control-Allow-Origin头部来限制哪些源可以访问资源,但需要注意的是,CORS主要针对跨域的API请求,对于同源的CSRF攻击不起作用。
-
Double Submit Cookie:在页面中嵌入一个隐藏的表单字段,其值与用户 session 中的某个关键 Cookie 值相同。当表单提交时,同时验证表单中的这个字段值与Cookie值是否一致。
-
User Interaction Requirement:要求敏感操作必须有用户交互,比如点击确认按钮,而不是仅靠页面加载或自动提交表单。
结合多种策略可以更有效地防范CSRF攻击,提高网站的安全性。
标签:跨站,请求,网站,用户,Cookie,CSRF,伪造 From: https://www.cnblogs.com/zsnhweb/p/18186216