XSS攻击与CSRF攻击

257 阅读4分钟

XSS攻击与CSRF攻击

XSS攻击

XSS攻击是什么

  • 跨站点脚本攻击,通过注入脚本,并运行在用户的浏览器中,获取用户的信息,cookie或者sessionID等

具体有哪些XSS攻击方式?特点

  • 在页面中用户输入的信息未做转义,攻击者会利用用户输入的代码片段,拼接上特殊格式字符串比如script标签,或者一些引号,突破一些标签、属性的限制,形成代码片段被注入到网页中。然后这些内容经浏览器渲染,在用户的浏览器中运行。
  • 虽然做了转义,但比如一些a标签或者img标签里面的href、src属性,可能会包含javascript:这样的可执行代码,这样用户点击时就会执行这些代码。
  • onload、onerror、onclick中的事件中注入不受控制的代码。

类型

  • 存储型。用户输入包含恶意代码的信息,通过表单提交等输入信息被存储到数据库中。浏览器在从数据库中获取数据渲染到页面的时候,恶意代码就会被执行。
  • 反射型,诱导用户打开一段url,里面拼接了一些代码片段。

如何防范

  • HTML转义,对用户输入的内容做转义,这样即使是script标签等特殊内容,也会被渲染成文本。
  • 对于a标签内的href src属性,设置白名单(Content Security Policy),禁止掉javascript链接和其他非法形式(外域代码,内联脚本,外域提交),只允许http,https等,其他都跳转到404.
  • cookie中设置httpOnly。防止js脚本获取到cookie信息。
  • 尽量避免使用innerHTML,document.write,等方法,使用安全性更高的textContent,setAttribute等方式替代。
  • 避免使用内联事件,主动做检测等等。

CSRF攻击

CSRF攻击

  • 跨站点请求伪造。诱导用户进入第三方网站,然后进入以后向被攻击的网站发送跨域请求,因为这时用户还保留着登陆状态,因此可以利用已经登录的状态冒充用户执行一系列操作。

具体有哪些

  • GET类型:当前页面中图片里面隐藏一个链接,诱导用户跳转页面,然后以用户的身份进行操作
  • Post类型:通过一个诱导用户点击的超链接,用户点进去以后网页中包含一个自动提交的表单,模拟用户完成一系列的POST操作。

有哪些特点?

  • 通常是发生在第三方网站,而不是被攻击的网站
  • 是利用用户的登录状态,冒充用户进行操作,而不能获取到用户的登录凭证
  • 请求方式主要通过图片、超链接、 表单等
  • 发送的请求一般是跨域的。

如何防范?

  • 响应头中设置Cookie的sameSite属性:Strict(跨站点不会发送cookie),Lax(大多数情况不发送第三方Cookie)第三方网站不携带Cookie
  • 同源检测:因为一般是发生在第三方网站中,发送的请求一般是跨域的。因此可以对请求进行同源检测,阻止不明外域的访问,监测外域的请求。具体做法是Http请求头中验证HTTP Refer、Origin字段,判断请求来源。
  • 通过Token验证。因为CSRF攻击一般是把攻击者发送的请求去当作是用户发送的请求,因此可以让用户发送请求的时候携带一个攻击者获取不到的Token信息,然后让服务端进行校验。服务端生成token,前端保存在local-Storage或者Session-Storage中,之后每次请求都要带上,第三方网站无法获取到token,因此服务器可以识别是否为第三方网站的请求。
  • 通过双重Cookie验证、二次验证。因为CSRF攻击并不能获取到用户的Cookie信息,只是利用已有的cookie信息进行操作,因此可以多进行一次cookie验证。或者通过手机验证码、邮箱验证等方式进行二次验证。

XS-Leaks

  • 跨站泄露:利用了对http缓存进行查询到机制,通过对资源缓存的判断进而推断出当前用户的相关信息。