前端安全
一、跨站脚本攻击(XSS攻击)
通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
XSS的分类
1、反射型
原理:反射型XSS,也叫非持久型XSS,是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。
实现:攻击者通过给用户发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。
2、存储型
原理:一般是攻击者输入的恶意代码“存储”在服务器端,主要是将XSS代码发送到服务器,不管是数据库、内存还是文件系统等。只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
实现:存储型 XSS 一般出现在网站留言、评论、博客日志等交互处。例如:黑客提交了一条包含XSS代码的留言到数据库。当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。浏览器发现有XSS代码,就当做正常的HTML和JS解析执行。XSS攻击就发生了。
XSS的防御
浏览器禁止页面的Javascript访问带有HttpOnly属性的cookie。(实质解决的是:XSS后的cookie劫持攻击)如今已成为一种“标准”的做法
输入检查(XSS Filter)让一些基于特殊字符的攻击失效。(常见的Web漏洞如XSS、SQLInjection等,都要求攻击者构造一些特殊字符)
输出检查在变量输出到HTML页面时,使用编码或转义的方式来防御XSS攻击
二、跨站请求伪造(CSRF)
CSRF就是利用你所在网站的登录的状态,以你的名义向网站发送恶意请求。CSRF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,盗取你的账号,甚至购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全等。
demo:
用户登录自己的博客网站(本地cookie已经保存了登录信息)
攻击者构造一个页面:http://www.a.com/csrf.html
其内容为<img src="http://blog.sohu.com/manage/entry.do?m=deleted&id=156714243" />
使用了一个img标签,其地址指向了删除Iid为156714243的博客文章
然后攻击者诱使用户访问这个页面
用户进去看到一张无法显示的图片,这时自己的那篇博客文章已经被删除了
关键点:
- 用户登录受信任网站A,并且在本地生成Cookie。
- 在不退出网站A的情况下,访问危险网站B。
CSRF的防御
- 增加token(token就是服务端返回给客户端类似sessionid) 在请求中放入攻击者所不能伪造的信息,并且该信总不存在于cookie之中。鉴于此,系统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token校验,如果请求中没有token或者token内容不正确,则认为是CSRF攻击而拒绝该请求。
- 通过Referer识别 根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限的页面的请求都来自于同一个网站。
中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限的页面的请求都来自于同一个网站。 - 网站重要操作增加验证码 CSRF攻击过程中,用户在不知情的情况下构造了网络请求,添加验证码后,强制用户必须与应用进行交互。