zoukankan      html  css  js  c++  java
  • 白帽子讲Web安全1.pdf

    第一章 我的安全世界观

    安全是一个持续过程

    6种威胁:Spoofing(伪装)、Tampering(篡改)、Repudiation(抵赖)、InformationDisclosure(信息泄漏)、Denial of Service(拒绝服务)、Elevation of Privilege(提升权限)

    一个优秀的安全方案需要:

    有效解决问题

    用户体验良好

    高性能

    低耦合

    易于升级和扩展

    安全策略

    Secure by Default原则(最小权限原则):白名单可通过和禁止黑名单,前者限制的范围更大更安全

    Defense in Depth原则(纵深防御):在各个方面,各个深度形成整体进行有效防御

    数据与代码分离原则:应当注意代码与数据的边界,将用户数据当作代码执行导致安全问题发生

    第二章 浏览器安全

    同源策略:限制来自不同源的"document",对当前"document"读取或设置某些属性

    浏览器提出了"Origin(源)"的概念,影响“源”的因素有:host(域名或IP地址,如果是IP地址则看作一个根域名)、子域名、端口、协议,在浏览器中<script>、<img>、<iframe>、<link>等标签可以跨域加载资源,不受同源策略限制,这些带"src"属性的标签加载时,实际上是由浏览器发起一次GET请求,不同于XMLHttpRequest,通过src属性加载的资源,浏览器限制了JavaScript权限,使其不能读、写其中返回的内容

    对于浏览器来说,除了DOM、Cookie、XMLHttpRequest受到同源策略限制以外,一些加载的第三方插件Flash、Google Gears等都有自己的控制策略

    浏览器采取多进程构架,Google Chrome将主要进程分为浏览器进程、渲染进程、插件进程、扩展进程,各个进程相互隔离,互不影响

    IE8也采取了多进程构架,每一个Tab页即一个进程

    Sandbox即沙箱,现今泛指“资源隔离类模块”的代名词,Sandbox设计目的是为了让不可信的代码运行在一定的环境中,限制代码访问隔离区之外的代码,或者是通过一定的数据通道(封装的API)

    多进程构架相对于单进程构架的好处在于发生崩溃时,其他进程不会受到影响

    恶意网址拦截:浏览器周期性地从服务器端获取恶意网址名单,访问这些网址时弹出一个警告页面

    第三章 跨站脚本攻击(XSS)

    跨站脚本攻击,全称Cross Site Script,为了区别于CSS(Cascading Style Sheet),称为XSS

    XSS根据效果不同,可以分为以下几类

    反射型XSS:只是简单地把用户输入的数据“反射”给浏览器,黑客往往需要诱使用户“点击”一个恶意链接才能攻击成功,也称作“非持久型XSS”

    存储型XSS:把用户输入的数据“存储”在服务器端,具有很强的稳定性,比如一篇博客里包含恶意代码,所有访问该博客的用户都会在浏览器中执行这段恶意代码,也称“持久型XSS”

    DOM Based XSS:这种类型并非按照“数据是否保存在服务器端”来划分,它从效果来说也是反射型XSS,通过修改页面的DOM节点形成的XSS(通过闭合之前的标签,//注释掉之后的内容,中间插入<script>)

    XSS攻击进阶

    攻击者对页面植入恶意脚本,这些恶意脚本被称为“XSS Payload”,常见的XSS Payload就是通过读取浏览器的Cookie对象,发起“Cookie劫持”攻击,Cookie一般加密保存了当前用户的登陆凭证,攻击者可以不通过密码直接登陆用户账户,在后面的章节讲Cookie防御

    构造GET与POST请求:假设Sohu博客所在域的某页面存在XSS漏洞,可以通过一张图片发起一个GET请求

    var img=document.createElement("img");

    img.src="http://blog.sohu.com/manage/entry.do?m=delete&id=156713012";

    document.body.appendChild(img);

    只要让博客作者执行这段JavaScript代码就可以把这篇文章删除

    XSS代码还可以模拟浏览器发送GET、POST请求

    例如获取QQ邮箱sid编码后模拟浏览器请求

    识别用户端信息

    在IE中可以通过判断ActiveX控件的classid是否存在来推测用户是否安装了该软件,然后选择对应的浏览器漏洞植入木马(下例检测是否安装了迅雷软件)

    第三方软件可能会泄漏一些信息,比如Flash有一个system.capabilities对象,能够查询客户端电脑中的硬件信息

    Firefox的插件(Plugins)列表存放在一个DOM对象中,通过查询DOM可以遍历出所有的插件navigator.plugins对象

    获取用户IP:JavaScript本身没有获取本地IP地址的能力,XSS可以借助第三方软件来完成,比如客户端安装了Java环境,XSS就可以通过调用Java Applet的接口获取客户端的本地IP地址

    有安全研究者将XSS Payload功能封装起来,成为XSS攻击平台,主要目的在于演示XSS的危害

    Attack API

    BeEF

    XSS-Proxy

    终极武器:XSS Worm

    2005年,19岁的Samy Kamkar发起了对MySpace.com的XSS Worm攻击,当时的MySpace过滤了很多危险的HTML标签,只保留了<a><img><div>等安全标签,所有的事件如“onclick”也被过滤了,却允许CSS,如

    <div style="background:url('javascript:alert(1)')">

    通过拆分法避开JavaScript的敏感词

    一般来说,存在储存型的XSS,比较容易发起XSS Worm攻击

  • 相关阅读:
    其实 Linux IO 模型没那么难
    七年三次大重构,聊聊我的重构成长史
    听说 JVM 性能优化很难?今天我小试了一把!
    盘点三年来写过的原创文章
    如何快速实现一个连接池?
    树结构系列(四):MongoDb 使用的到底是 B 树,还是 B+ 树?
    树结构系列(三):B树、B+树
    树结构系列(二):平衡二叉树、AVL树、红黑树
    树结构系列(一):从普通树到二叉查找树
    静态代码分析工具清单
  • 原文地址:https://www.cnblogs.com/sdgjytu/p/3881536.html
Copyright © 2011-2022 走看看