关于WEB安全的知识

关于WEB安全的知识

第一章 客户端安全

2.1 同源策略

限制不同的document脚本对当前的document读取或者设置某些属性

端口,协议或者域名之一有一个不一样就会产生跨域问题

2.2 浏览器沙箱

浏览器利用沙箱技术,可以让不受网页信任的代码,JavaScript代码运行在一个收到限制的环境中,从而保护本地的桌面系统安全。

浏览器的多进程架构,将浏览器的各个功能分开,当一个进程崩溃时,也不会影响到其他的进程。谷歌是第一个引入浏览器多进程架构的浏览器,主要分为浏览器进程、渲染进程、插件进程以及扩展进程。

2.3 恶意网址拦截

原理:浏览器周期性地从服务器获取一份最新的恶意网址名单。

恶意网站:
①挂马网站:利用浏览器的漏洞执行恶意JavaScript代码
②钓鱼网站:模仿知名网站来欺骗用户

拦截:谷歌黑名单库,EVSSL证书


第二章 跨站脚本攻击

3.1 XSS简介

指的是黑客用过HTML注入篡改网站,插入了恶意脚本,从而在用户浏览时控制用户的权限。

类型:
1、反射型XSS:简单地把用户输入的数据“反射”给用户,往往诱使用户点击才会成功。也成为非持久性XSS攻击
2、存储型XSS:把用户的数据存储在服务端。也称为持久性XSS。比如黑客发表一篇含有恶意代码的文章,用户阅读后把恶意脚本存储在服务端。
3、DOM Based XSS:并非按照数据是否存储在服务端划分的,效果上来说是反射型的XSS。单独划分来说,比如构造一个事件,闭合源码的’且插入自己的JavaScript代码。第二个就是会闭合掉a然后使得触发另外的函数。

3.2 XSS攻击进阶

  • XSS Playload:攻击者攻击成功之后就会执行它的恶意代码,XSS Playload就是JavaScript代码。比如他会读取你的浏览器cookie对象,这也称为cookie劫持。可以通过HttpOnly标识防止cookie劫持

  • 构造GET请求和POST请求可能导致用户删除重要资料和文章。还可以利用这个来获取用户的账户密码等信息。

  • 非法获取用户的IP地址。因为很多时候用户的电脑都是使用了代理服务器,网站看到的IP地址其实是内网的出口IP地址。

3.3 XSS防御

  • HttpOnly:主要是为了解决XSS攻击后的cookie劫持攻击。

step1 :浏览器向服务器发送请求,这时候是没有cookie的
step2 :服务器返回set-Cookie头,向客户端浏览器写入Cookie
step3 :在该Cookie到期之前,浏览器访问该域下的所有页面都应该发送Cookie

  • 处理富文本:在标签选择上尽量选择白名单,避免使用黑名单

第四章 跨站请求伪造

攻击者在自己的域内伪造一个页面,比如删除某个博客的文章。然后诱使用户访问一个页面,就以该用户身份在第三方站点执行一次操作。
####CSRF防御

  • 验证码:CSRF攻击通常是用户在不知情的情况之下构造了网络请求,而验证码是用户必须与应用进行交互才能完成最终请求。
  • Referer Check :用于检查请求是否来自于合法的"源"。比如用户需要发帖就会登陆到后台,那么Referer这个值必然是发帖表单所在的页面。但是有一个缺陷,服务器并非什么时候都会去得到Referer。
  • Token:Token 需要同时放在表单中和session中,提交表但时,服务器要验证表单中的Token是否与用户session或者(cookie)中的Token是否一致。
  • token一定要足够随机

第五章 点击劫持

5.1 点击劫持

点击劫持其实就是利用视觉上的欺骗手段。攻击者使用一个不透明、不可见的iframe覆盖在网页上,

5.2 拖拽劫持和数据窃取

诱使用户从不可见的iframe中拖拽出攻击者希望得到的数据。

5.3 触屏劫持

  • touchstart
  • touchend
  • touchmove
  • touchcancel

5.4 防御ClickJacking

  • frame busting
    写一段JavaScript代码防止iframe嵌套

  • X-Frame-Options
    使用一个HTTP请求头,当值位DENY时浏览器拒绝加载当前页面任何frame页面;若值为sameorigin时允许加载同源页面下的页面;当值为allow-from origin时就允许加载页面的地址


第六章 HTML5安全

6.1 HTML5新标签

使用HTML5新增的标签,比如说video等用于远程加载资源的标签会存在XSS漏洞。

  • iframe的sandbox
    为了限制iframe的脚本,为iframe定义了一个sandbox属性,将iframe所加载的内容视为一个独立的"源",其中的脚本被限制执行,表单被限制提交,插件被禁止加载。
  • postMessage----跨窗口传递信息
    允许每一个window对象往其他的擦窗口发送文本信息,从而实现跨窗口消息传递,这个功能是不受同源策略限制。

第七章 注入攻击

7.1 SQL注入

注入的本质就是把用户输入的数据当成代码执行。原来程序要执行的数据拼接了用户输入的数据。


第八章 认证与会话管理

  • 认证的目的就是为了认出用户是谁,授权就是为了决定用户能够做什么。
  • 认证实际上就是一个验证凭证的过程。
  • 单点登陆,用户登陆一次就可以访问所有的系统。
  • OpenID是一个开放的单点登陆系统,用的是URI作为用户在互联网上面的标识,然后网站重定向到openID的提供者认证,认证完成后再重定向回网站。
  • web应用中,用户登陆后,服务器会返回一个sessionID加密写在浏览器的cookie上。