吐槽:经典八股文,面试的时候被问到了,实际上其实也确实挺有用的这些东西,哭了

XSS

全称Cross Site Scripting,名为跨站脚本攻击,黑客将恶意脚本代码植入到页面中从而实现盗取用户信息等操作。

恶意攻击者往 Web 页面里嵌入恶意的客户端脚本,当用户浏览此网页时,脚本就会在用户的浏览器上执行,进而达到攻击者的目的。比如获取用户的 Cookie、导航到恶意网站、携带木马等。

注入方法

任何可以输入的地方都有可能引起XSS攻击,包括URL

  • 在HTML内嵌的文本中,恶意内容以script标签形成注入
  • 在内联的JavaScript中,拼接的数据突破了原本的限制(字符串,变量,方法名)等
  • 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签
  • 在标签的 href、src 等属性中,包含 javascript: (伪协议)等可执行代码。
  • onload、onerror、onclick 等事件中,注入不受控制代码。

XSS的分类

可分为存储型、反射性和DOM型三种

预防XSS

  • 前端和后端一起做数据过滤,前端可以使用axios拦截器,在发送请求前先过滤一遍数据,后端在接收时再过滤一遍。
  • 尽量使用post,使用get方式时对路径长度进行限制
  • 对输入、输出结果进行过滤和必要的转义

CSRF

跨站请求伪造(Cross-site request forgery),就是攻击者伪装成用户身份来执行一些非用户自愿的恶意以及非法操作。

典型的CSRF攻击:

  • 用户A经常访问网站B,然后攻击者发现网站B中存在CSRF的漏洞,加以利用,勾引用户A访问攻击者写好的危险网站C,此时用户A的cookie等信息还没有失效,危险网站C中有向网站B的非法请求,此时用户的信息就容易泄露了。
  • 通常请求被放置在img标签的src中,当用户访问了包含这个标签的网页时,浏览器会自动向src中的地址提交一次http请求
  • 通过夸张的广告诱导用户点击链接,跳转到危险的网站,该网站自动自动发送请求,冒充用户执行相应的操作。

预防CSRF

  • 验证码
  • 设置CSRF Token,或使用TokenId令牌
  • 为Set-Cookie响应头新增Samesite属性,Samesite=Strict

CSRF和XSS的区别

  1. CSRF需要登陆后操作,XSS不需要
  2. CSRF是请求页面api来实现非法操作,XSS是向当前页面植入js脚本来修改页面内容。