前端XSS和CSRF

110 阅读2分钟

一.XSS跨站脚本攻击,恶意的脚本被非法注入且执行,获取用户的cookie或sessionID等敏感信息

场景

  • html文档遇到script标签则会执行js脚本
  • dom事件等回调方式执行的脚本
  • 原生元素某些属性,比如img说src,a的href
  • URL参数获取值进行操作

主要攻击方式

  • 提交代码-比如评论,发帖等发送恶意代码到服务器
  • 浏览器执行代码-URL参数等

XSS类型

  • 储存型-A提交一个恶意代码存在服务器上,然后B用户打开的页面从服务器请求了恶意代码并且执行,常见于贴吧,评论,留言等
  • 反射性-攻击者通过给URL添加恶意的参数,请求到服务器,然后服务器再返回恶意的js给页面
  • DOM型-攻击者通过DOM输入恶意代码并且执行,比如input,DOM innerHtml插入等

预防措施

  • 由于储存型和反射型都是通过服务器下发,所以最好改成前端渲染页面,后端只处理数据
  • 对需要注入的代码做好充分的转译,推荐通用的的html模版方法,v-html,dangerouslySetInnerHTML
  • 对明确类型的输入做判断,比如电话,数字,字符串
  • http-only 对cookie做到只读
  • 尽量不要内联方法,推荐事件绑定addEventLister等

二.CSRF跨站请求伪造,用户已经存在的登陆态,诱导用户点击第三方的链接,第三方通过获取当前的登陆态伪造请求。比如A用户登陆了支付页面,点击了诱导B链接,B则可以发起一个登陆的请求

主要攻击方式

  • 在某些已经登陆的页面发送诱导链接

预防措施

  • token替代cookie,token存在localStorage也有同源策略
  • 服务器验证referer判断来源
  • CROS通过浏览起的同源策略禁止跨域
  • cookie双重验证,由于cookie通过参数再传一遍,参数再通过服务器对比一次

其他,如何跨域获取cookie

前端:请求withCredentials = true

服务端: allow-control-allow-origin = 白名单 & allow-control-allow-credentials = true