# 前端安全

# XSS攻击(跨站脚本攻击)

  • 通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击

# XSS的分类

# 1.反射型 XSS

  • 原理:反射型XSS,也叫非持久型XSS,是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行
  • 实现:攻击者通过给用户发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。

# 2.存储型XSS

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

# XSS的防御

# 1.HttpOnly

  • 浏览器禁止页面的Javascript访问带有HttpOnly属性的cookie。(实质解决的是:XSS后的cookie劫持攻击)如今已成为一种“标准”的做法

# 2.输入检查(XSS Filter)

  • 让一些基于特殊字符的攻击失效。(常见的Web漏洞如XSS、SQLInjection等,都要求攻击者构造一些特殊字符)

# 3.输出检查

  • 在变量输出到HTML页面时,使用编码或转义的方式来防御XSS攻击

# CSRF(跨站请求伪造)

  • CSRF就是利用你所在网站的登录的状态,以你的名义向网站发送恶意请求。CSRF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,盗取你的账号,甚至购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全

# 例子

  • 用户登录自己的博客网站(本地cookie已经保存了登录信息)
  • 攻击者构造一个页面:http://www.a.com/csrf.html
  • 其内容为
  • 使用了一个img标签,其地址指向了删除Iid为156714243的博客文章
  • 然后攻击者诱使用户访问这个页面
  • 用户进去看到一张无法显示的图片,这时自己的那篇博客文章已经被删除了

# 关键点:

  • 用户登录受信任网站A,并且在本地生成Cookie
  • 在不登出网站A的情况下,访问危险网站B

# CSRF的防御

  • 1.增加token在请求中放入攻击者所不能伪造的信息,并且该信总不存在于cookie之中。鉴于此,系统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token校验,如果请求中没有token或者token内容不正确,则认为是CSRF攻击而拒绝该请求

  • 2.通过Referer识别根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限的页面的请求都来自于同一个网站

  • 3.网站重要操作增加验证码CSRF攻击过程中,用户在不知情的情况下构造了网络请求,添加验证码后,强制用户必须与应用进行交互