跳到主要内容

1 篇博文 含有标签「csrf」

查看所有标签

· 阅读需 3 分钟

CSRF​

Cross-Site Request Forgery 跨站请求伪造

它是指攻击者利用了用户的身份信息,执行了用户非本意的操作

image-20240515105526317

  1. 首先用户正常登录银行网站,登录成功后获取 bank.com 的 cookie
  2. 然后引导用户访问了危险网站,这个网站会响应一个页面,这个页面会发送请求到被攻击的站点 bank.com
    • 比如放一个隐藏的 img 标签,src 就是 bank.com 的转账接口,路径带有转账接口的参数
    • 再比如放一个 iframe,构造一个 post 请求的表单页面嵌入 iframe,表单会调用 bank.com 的转账接口
  3. 由于浏览器在解析 HTML 时处自动触发静态资源的请求,于是在解析到这个静态资源时就会给 bank.com 发起转账请求,并附带上之前登录成功获取的 cookie,从而使接口调用成功,完成攻击

防御方式​

  1. 不用 cookie,用 jwt,在 ls 中读写
  2. 使用 sameSite,有 none、strict 和 lax 三种值
    1. none 为默认值,表示没有任何限制
    2. strict 表示只能是在访问同一站点时的请求才会带 cookie
    3. lax 表示宽松的,get 请求自动带上 cookie,post 请求则不会自动带 cookie
  3. 使用 csrf token,在转账前设置校验环节,此时给客户端一个一次性的,用于接下来正式转账接口的 token,结合 cookie 鉴权流程,完成防御

XSS​

Cross Site Scripting 跨站脚本攻击

攻击者利用站点的漏洞,在表单提交时,在表单内容中加入一些恶意脚本。当其他正常用户浏览页面,脚本被执行,从而使得页面遭到破坏或者用户信息被窃取

常见于论坛、博客或者评论区等场景

防御方式​

服务器端对用户提交的内容进行过滤或编码

  • 过滤:去掉一些危险标签,去掉一些危险的属性
  • 编码:对危险的标签进行 HTML 实体编码,例如将 <script></script> 编码为 &lt;script&gt; &lt;/script&gt;