目录
前言
阅文集团后端笔试
参考:https://tech.meituan.com/2018/10/11/fe-security-csrf.html
一、CSRF攻击
(一)是什么
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。
一个典型的CSRF攻击有着如下的流程:
- 受害者登录a.com,并保留了登录凭证(Cookie)。
- 攻击者引诱受害者访问了b.com。
- b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
- a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
- a.com以受害者的名义执行了act=xx。
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
(二)怎么防御
CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性。并且CSRF具有这俩个特点:
- CSRF(通常)发生在第三方域名。
- CSRF攻击者不能获取到Cookie等信息,只是使用。
针对这两点,我们可以专门制定防护策略,如下:
- 阻止不明外域的访问
- 同源检测
- Samesite Cookie
- 提交时要求附加本域才能获取的信息
- CSRF Token
- 双重Cookie验证
- 在我们登录成功获得
Token
之后,一般会选择存放在localStorage
(浏览器本地存储)中。然后我们在前端通过某些方式会给每个发到后端的请求加上这个Token
,这样就不会出现 CSRF 漏洞的问题。因为,即使有个你点击了非法链接发送了请求到服务端,这个非法请求是不会携带Token
的,所以这个请求将是非法的。
二、SSRF攻击
(一)是什么
SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
攻击者利用服务器作为代理,发送请求到内部或外部的资源。
- 能扫描内部网络,获取端口,服务信息。
- 攻击运行在内网或本地的应用程序。
(二)怎么防御
- 输入验证:对用户输入进行严格校验,禁止任何可能导致请求转发的输入。
- 白名单机制:仅允许请求指定的IP或域名,限制服务器发送请求的目标。
- 不直接处理用户输入:避免直接使用用户输入构建请求,而是使用安全的、经过限制的URL。
- 网络隔离:将敏感服务与外网隔离,限制服务器的访问权限,最小化暴露面。
- 监控与日志:定期监控请求和访问日志,以发现潜在的异常行为。