前端安全是什么

166 阅读4分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

跨站脚本攻击(XSS攻击)

简介

XSS又称CSS(Cross SiteScript),跨站脚本攻击,是web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式。其原理是攻击者有意向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如:盗取用户的cookie,破坏页面结构,重定向到其他网站等。

分类

  • 反射型XSS

    • 原理: 反射型XSS,又叫非持久性XSS,是指发生请求时,XSS代码出现在请求 URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。

    • 实现:攻击者通过给用户发送带有恶意脚本的URL地址,当URL地址被打开的时,特有的恶意代码参数被HTML解析,执行。

  • 存储型

    • 原理:一般是攻击者将恶意代码“存储”在服务器端,主要是将XSS代码发送到服务器,不管是数据库,内存还是文件系统。只要用户浏览包含此恶意代码的页面都是执行恶意代码。
    • 执行:存储型XSS一般出现在网站的留言,评论,博客日志等交互处。例如:攻击者在网站提交了一条包含XSS代码的留言道数据库,当用户查询留言时,那些包含恶意代码的留言就会从服务器解析之后加载出来,浏览器发现有恶意代码,但是作正常的HTML和JS解析执行。XSS的攻击就发生了。
  • DOM based XSS

    • 基于DOM的XSS,也就是没有服务器的参与,仅仅只涉及浏览器的XSS,比如根据用户的输入来动态构造一个DOM节点,如果没有对用户的输入进行过滤,也就导致了XSS的产生。

XSS防御

XSS防御的总体思路:对输入(URL参数)进行过滤,对输出进行编码

跨站请求伪造(CSRF)

CSRF就是利用你所在的网站的登录的状态,以你的名义向网站发送恶意请求。例如利用你的身份发送邮件,短信,交易转账,盗取你的账号,甚至购买商品,虚拟货币转账等等。

实现:用户登录受信任网站A,并且在本地生成了cookie,在不退出网站A的情况下,访问了危险网站B。

CSRF防御

  1. 增加token(token就是服务端返回给客户端类似sessionId)。在请求中放入攻击者不能伪造的信息,并且该信息总是不存在于cookie当中。系统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端进行token验证,如果请求中没有token或者token内容不正确,则认为是CSRF攻击而拒绝请求。
  2. 通过Referer识别。根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了HTTP请求的来源地址。在通常情况下,访问一个安全受限的页面的请求都来自同一个网站。
  3. HTTP 头中自定义属性并验证。这种方法也是使用 token 并进行验证,和之前不同的是,这里并不是把 token 以参数的形式置于HTTP请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入token的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。