CSRF 跨站请求伪造漏洞

原理

当一个网站A使用Cookie,存储SessionToken来用于单点登录和权限操作时。浏览器将Cookie存储到浏览器中。当用户在访问另一个网站V时,黑客可以通过伪造表单,向网站A发送修改重要信息(如密码)、支付等操作,浏览器会自动携带Cookie。

在服务端看来这就是一个正常的请求,于是在用户不知情的情况下,做出响应。

两个条件

  1. 用户访问站点A并产生了Cookie
  2. 用户没有退出站点A(清除Cookie),就访问了黑客伪造表单的B网站

防御措施

CSRF一般发生在第三方网站,而且攻击者只是冒用登录凭证而不是获取登录凭证数据,所以,可以指定以下防范策略:

  • 阻止不明外部域名的访问
    • 同源检测
    • Sanmesite Cookie
  • 提交Form表单时,添加本域才能获取的验证信息
    • CSRF token

1. 同源检测

Cookie的同源和浏览器的同源策略有所区别:

  • 浏览器同源策略:协议、域名和端口号都相同即同源
  • Cookie同源策略:域名相同即同源

在HTTP协议中,每个异步请求都会携带两个header,用来标记来源域名:

  • Origin Header
  • Referer Header

这两个Header在浏览器发送请求时,大多数情况会自动带上,并不能由前端修改,服务器接收到后,根据这两个Header来确定来源的域名。

另外,CSRF大多数情况下来自第三方域名,但并不能排除本域发起。如果攻击者有权限在本域发布评论(含链接、图片等),那么它可以直接在本域发起攻击,这种情况下同源策略无法达到防护的作用。

综上所述:同源验证是一个相对简单的防范方法,能够防范绝大多数的CSRF攻击。但这并不是万无一失的,对于安全性要求较高,或者有较多用户输入内容的网站,我们就要对关键的接口做额外的防护措施。

2. Samesite Cookie属性

Cookie的Sanmesite属性用来限制第三方Cookie,从而减少安全风险,它有三个值:

go 复制代码
Set-Cookie: SameSite = Strict; // 最为严格,完全禁止跨站点时发送Cookie
Set-Cookie: SameSite = Lax; // 只有GET请求发送
Set-Cookie: SameSite = None; // 关闭SameSite属性,但必须设置Secure属性,如下
go 复制代码
Set-Cookie: SameSite = None  // 无效
Set-Cookie: SameSite = None; Secure  // 有效

设置了StrictLax,基本就能阻止CSRF攻击,前提是浏览器支持SameSite属性。

3. CSRF token

CSRF攻击之所以能够成功是因为服务器把攻击者携带的Cookie当成了正常的用户请求,那么我们可以要求所有用户请求都携带一个无法被攻击者劫持的token,每次请求都携带这个token,服务端通过校验请求是否为正确token,可以防止CSRF攻击。

CSRF token的防护策略分为三步:

  1. 将token输出到页面
    首先,用户打开页面的时候,服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,显然在提交时Token不能再放在Cookie中了,否则又会被攻击者冒用。
  2. 请求中携带token
    对于GET请求,将token附在请求地址之后,如:http://url?token=tokenValue
    对于POST请求,要在Form表单后面加上
go 复制代码
	<input type="hidden" name="token" value="tokenvalue"/>
  1. 服务器验证token是否正确
    服务端拿到客户端给的token后,先解密token,再比对随机字符串是否一致,时间是否有效,如果字符串对比一致且在有效期内,则说明token正确。

总结

简单总结一下上文的CSRF攻击的防护策略:

  • 自动防护策略:同源检测(OriginReferer验证);
  • 主动防护策略:token验证以及配合SameSite设置;
  • 保护页面的幂等性,不要再GET请求中做用户操作

为了更好的防御CSRF,最佳实践应该是结合上面总结的防御措施方式中的优缺点来综合考虑,结合当前Web应用程序自身的情况做合适的选择,才能更好的预防CSRF的发生。

相关推荐
XR1234567881 小时前
医院网络安全与等保合规选型指南
安全·web安全
Bruce_Liuxiaowei3 小时前
基于微步在线威胁情报的公网 IP 攻击迹象监测:threatbook_query 脚本全解析与 BruceSec 平台整合实践
数据库·tcp/ip·安全·网络安全·智能体
小新讲网安7 小时前
安全运营中心(SOC)建设实战:从SIEM到威胁狩猎全流程指南
网络·安全·web安全·网络安全·网安
笨鸟先飞,勤能补拙8 小时前
Web 服务器与计算机网络全景原理
运维·服务器·前端·网络·人工智能·计算机网络·web安全
pcplayer9 小时前
Delphi WebService 使用 HTTP Header 管理 Session
http·webservice·soap·web server·http header
FfHUCisI10 小时前
Golang HTTP 路由设计与请求处理
开发语言·http·golang
Atomic1213811 小时前
Apache Shiro 核心漏洞与实战利用指南
web安全·网络安全·渗透测试
小新讲网安11 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
上海安当技术1 天前
诊断接入认证:安当CAS如何堵住汽车网络安全的物理后门
网络·web安全·汽车·access·secure·安当cas·诊断接入认证
ze^01 天前
【软考信息安全】第2章 网络攻击原理与常用方法
网络·web安全·网络安全