2

今天主要复习了一些比较常见的网络完全的问题

  1. XSS攻击


他主要的做法就是在页面上执行一段javascript,获取网站的信息,如cookie,他主要分几个类型:

  • 反射型,如在img中的url是一段带<script>的代码;他主要是设计一个url来获取客户信息

  • 保存型:
    这种是脚本保存在数据库中,不经过滤就存储并显示给用户。实现这个过程主要分两步,先将恶意代码数据提交给服务器;然后服务器再将恶意代码返回给客户端,执行恶意代码;

  • 基于DOM型:

    攻击的过程可以用如下图来表示:
    图片描述

    怎么防御:校验用户输入和校验Id类型,正则匹配; 在页面输出之前先进行转义,html编码,javascript编码;url编码; csp

    有可能会出现攻击的几个点:

  • &号不应该出现在HTML的大部分节点中

  • 括号<>是不应该出现在标签内的,除非是引号引入

  • 在ext节点里面,<左尖括号有很大的危害

  • 引号在标签内可能有危害,具体危害取决于存在的位置,但是在text节点是没有危害的。

CSRF

  1. CSRF(Cross-site Request forgery)跨站请求伪造,他主要做的是,攻击者盗用你的登录信息,以你的身份模拟发送各种请求。

    CSRF的攻击图:
    图片描述

从图中可以看出,要完成一次CSRF攻击,受害者必须完成两个步骤

  • 登录受信任网站A,并在本地生成cookie

  • 在不退出A的情况下,访问危险网站B。

需要满足这两个条件,才会收到CSRF的攻击,因为你不能保证以下情况不会发生

  • 你登录了一个网站后,不再打开一个tab页面并访问另外的网站,特别是现在浏览器都是支持多tab的。

  • 关闭本地的浏览器后,本地的Cookie不会立刻过期

  • 上图中的攻击网站,可能存在一个存在其他漏洞的可信任的经常被人访问的网站

如何预防CRSF:

服务端预防: 正确使用GET、POST和Cookie; 在非GET请求中增加伪随机数;

随机数的增加主要有三个方式:
 - 为每个用户生成一个唯一的cookie token,所有表单都包含同一个伪随机值
 - 每个请求都是用验证码,这个方案完美,因为要多次输入验证码,所以用户友好性很差,所以不适合实际运用
 - 不同的表单包含一个不同的伪随机值
 

3.HTTP劫持:主要是运营商,预防的方法是https

4.DNS劫持

HTML5的技术对网络安全的帮助

  • XMLHttpRequest Level 2 (Cross-origin Resource Sharing)
    阮一峰的博格

  • 本地存储: 增加了local storage 和 session storage,使存储信息从cookie中走出来

  • web worker(js多线程执行): 因为执行js会阻塞UI,h5实现了web worker这一机制,从而使得js可以使用子线程去执行任务,不阻塞UI线程

  • web secket(服务器推送机制)主要是为了保持长链接

  • 新标签和新API,比如<video>,<audio>,<canvas>使得可以少用第三方插件,减少不可控安全问题
    (增强cookie的安全分方法: session cookie设置为true,创建cookie会被安全的形式向服务器传输,也就是在HTTPS连接中被浏览器传递到服务器端进行会话验证,如果是HTTP连接就不会传递信息,所以不会被窃取到Cookie的具体内容; HttpOnly属性,如果设置了HttpOnly属性,那么通过脚本将无法获取到Cookie信息,这样能有效的防止XSS攻击)

AJAX 跨域资源共享(CORS)

因为ajax是严格遵守同源策略的,所以诞生了ajax跨域方式的-CORS,就是为了解决跨域问题;除了这种方法以外,还有两种其他方式:jsonp的方式和flash跨域方案

CORS跨域的做法:用Access-Control-Allow-Origin这个头以及其他的头来实现的,客户端跨域访问另一个服务器,服务器会确定这个域名是否有权限来获取资源,若有则返回一个带有Access-Control-Allow-Origin头的response以及资源,若无则返回一个权限错误:XMLHttpRequest;

但是这个做法的风险点

http头信息可以伪造,说明头信息中的域名origin可以是假的,所以跨域是要配合身份验证进行的,所以跨域要带上session id;
就算带上了session id,但第三方还是可能会入侵,导致源站信息泄露,所以CORS是个非常危险的东西;
内部信息泄露,内部成员打开了一个evil website, 导致信息泄露,内部网站的数据也将泄露;
设置了Access-Control-Allow-Origin,并对请求点做了请求控制,但是返回权限错误的时候,请求信息已经到了客户端;
CORS默认不携带会话信息,但是如果withCredentials设置为true,就可以携带,所以最好不要设置为false.万一设置为true,请在Access-Control-Allow-Origin上设置具体的域名,不要使用*。

防御姿势:

不要对Access-Control-Allow-Origin设置*
对跨域要验证session信息
严格审查请求信息,比如请求蚕食,还有http头信息

所以应该怎么使用:

图片描述


jyren_Rachel
107 声望4 粉丝

下一篇 »
Promise