CSRF
Cross-Site Request Forgery 跨站请求伪造
它是指攻击者利用了用户的身份信息,执行了用户非本意的操作
- 首先用户正常登录银行网站,登录成功后获取
bank.com
的 cookie - 然后引导用户访问了危险网站,这个网站会响应一个页面,这个页面会发送请求到被攻击的站点
bank.com
- 比如放一个隐藏的
img
标签,src 就是 bank.com 的转账接口,路径带有转账接口的参数 - 再比如放一个
iframe
,构造一个 post 请求的表单页面嵌入 iframe,表单会调用 bank.com 的转账接口
- 比如放一个隐藏的
- 由于浏览器在解析 HTML 时处自动触发静态资源的请求,于是在解析到这个静态资源时就会给 bank.com 发起转账请求,并附带上之前登录成功获取的 cookie,从而使接口调用成功,完成攻击
防御方式
- 不用
cookie
,用jwt
,在ls
中读写 - 使用
sameSite
,有none
、strict
和lax
三种值- none 为默认值,表示没有任何限制
- strict 表示只能是在访问同一站点时的请求才会带 cookie
- lax 表示宽松的,get 请求自动带上 cookie,post 请求则不会自动带 cookie
- 使用
csrf token
,在转账前设置校验环节,此时给客户端一个一次性的,用于接下来正式转账接口的 token,结合 cookie 鉴权流程,完成防御
XSS
Cross Site Scripting 跨站脚本攻击
攻击者利用站点的漏洞,在表单提交时,在表单内容中加入一些恶意脚本。当其他正常用户浏览页面,脚本被执行,从而使得页面遭到破坏或者用户信息被窃取
常见于论坛、博客或者评论区等场景
防御方式
服务器端对用户提交的内容进行过滤或编码
- 过滤:去掉一些危险标签,去掉一些危险的属性
- 编码:对危险的标签进行 HTML 实体编码,例如将
<script></script>
编码为<script> </script>