《白帽子讲Web安全》读书笔记

  • 吴翰清 著

1. 安全世界观

  1. 白帽子,是指精通安全技术,但是工作在反黑客领域的专家们;
  2. 黑帽子,是指利用黑客技术造成破坏,深知进行网络犯罪的群体。
  3. SQL注入的出现是Web安全史上的一个里程碑。(1999)
  4. XSS是另一个里程碑。(2003)
  5. 安全问题的本质是信任问题。
  6. 假设安全的前提条件是可信任的。
  7. 安全三要素(CIA):
    • 机密性Confidentially
      • 加密
    • 完整性Integrity
      • 数字签名
    • 可用性Availability
      • 随需而得
      • 拒绝服务攻击DoS
  8. 安全评估
    • 资产等级划分
      • 互联网安全的核心问题,是数据安全的问题。
    • 威胁分析
      • 找准信任基础
    • 风险分析
      • DREAD模型,判断一个威胁的风险程度
    • 确认解决方案(设计安全方案)
      • 能够有效解决问题
      • 用户体验好
      • 高性能
      • 低耦合
      • 易于扩展与升级
  9. 安全原则
    • Secure By Default原则——时刻牢记
      • 黑名单、白名单
      • 最小权限原则
    • 纵深防御原则——更全面、更正确地看待问题
      • 各个不同层面、不同方面实施安全方案
      • 在正确的地方做正确的事
    • 数据与代码分离原则——从漏洞成因上看问题
      • 注入
        • <script>$var</script>
    • 不可预测性原则——从客服攻击方法的角度看问题
      • 有效抵御基于篡改、伪造的攻击
      • 加密算法、随机数算法、哈希算法
      • 用token防御CSRF
  10. 安全是一门平衡的艺术

2.客户端脚本安全

(1) 浏览器安全

  1. 同源策略Same Origin Policy
    • 浏览器同源策略限制了来自不同源的document或脚本对当前document读取或设置某些属性
    • 影响”源”的因素:host(根域名)、子域名、端口、协议
    • DOM、Cookie、XMLHttpRequest(不能跨域访问资源)、第三方插件(Flash(crossdomain.xml)、Java Applet、Silverlight、Google Gears)受同源策略的限制
    • script、img、iframe、link通过src加载资源(GET请求),限制js读写权限,对返回内容不能读、写
    • IE 8 CSS 跨域漏洞
  2. 浏览器沙箱
    • 单进程 or 多进程浏览器
  3. 恶意网址拦截
    • 基于黑名单,如PhishTank、Google SafeBrowsing API、EVSSL证书
  4. 其他
    • XSS Filter

(2) 跨站点脚本攻击(XSS)

  1. Cross Site Script,不一定跨域
  2. HTML注入
  3. XSS 分类
    • 反射型XSS
      • 简单把用户输入反射给浏览器,诱使用户点击恶意链接——非持久型XSS
    • 存储型XSS
      • 被保存到服务器端——持久型XSS
    • 基于DOM的XSS
      • 修改页面DOM节点
  4. XSS Payload
    • XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些恶意脚本称为XSS Payload。
    • Cookie劫持——举例
    • 构造GET/POST请求——举例
    • XSS钓鱼——举例,如画出一个登录框,钓鱼密码等,结合XSS劫持整个账户
    • 伪造User Agent
    • 识别用户安装的插件
    • CSS History Hack,利用a标签的visited属性,用户访问过的链接颜色与众不同——Firefox于2010修复
    • 获取用户真实IP
  5. XSS 攻击平台,演示XSS,如Attack API、BeEF、XSS-Proxy
  6. XSS Worm
    • 案例:MySpace.com;百度空间
  7. XSS构造技巧
    • 利用字符编码
    • 利用注释绕过长度限制
    • location.hash
    • <base>标签
    • window.name
  8. JS 框架暴露XSS漏洞
  9. XSS防御
    • Cookie 的 HttpOnly
    • 输入检查
    • 输出检查
    • HTMLEncode与JavaScriptEncode **
    • EncodeForCSS() **
    • DOM XSS ** P106

(3) 跨站点请求伪造(CSRF)

  1. Cross Site Request Forgery,利用用户的身份操作用户账户
  2. Cookie
  3. P3P
  4. POST/GET
  5. Flash CSRF
  6. CSRF Worm
  7. CSRF防御——不可预测性原则
    • 验证码
    • Referer Check
    • Token(注意XSRF)

(4) 点击劫持(ClickJacking)

  1. 透明、不可见iframe,诱导用户点击;实施成本高
  2. 图片覆盖攻击
  3. 拖拽劫持?P133
  4. 数据盗取
  5. 防御
    • 禁止iframe嵌套
    • X-Frame-Options

(5) HTML 5 安全

  1. <video><audio>标签
  2. iframe的sandbox
  3. noreferer
  4. Canvas
  5. 同源策略限制跨域,用jsonp、iframe实现跨域;
  6. XDomainRequest
  7. postMessage
  8. Web Storage面临更多挑战

3.服务端应用安全

(1) 注入攻击

(2) 文件上传漏洞

(3) 认证与会话管理

(4) 访问控制

(5) 加密算法与随机数

(6) Web框架安全

(7) 应用层拒绝服务攻击

(8) PHP安全

(9) Web Server配置安全

第12章 Web框架安全

《高性能JavaScript》读书笔记

  • Nicbolas C.Zakas 著
  • 丁琛 译

第1章:加载和执行 1

1.1 脚本位置

  • 由于脚本会阻塞页面其他资源的下载,因此,尽可能将所有的script放在body最底部

1.2 组织脚本

  • 减少script数量 当script的type为text/html时,仍然会影响速度吗?
  • 合并多个文件 当script长度受限制时,怎么做?
  • comobo

1.3 无阻塞的脚本

  • 在window的load事件触发后再下载脚本
  • 使用defer延迟<script src="xxx.js" defer></script>,仅支持IE、Firefox3.5
  • 动态创建<script>标签添加到<head>在IE中比添加到<body>更保险
  • 动态加载KISSY.getScript(url , { success : success , charset : charset }); 不在相同的域怎么处理?
  • XMLHttpRequest脚本注入,使用get方法,局限相同的域
  • 推荐做法:先添加动态加载所需的代码,然后加载初始化页面所需的剩下的代码:LazyLoad

1.4 小结

第2章:数据访问 15

  • 直接量 > 局部变量 > 数组元素、对象成员
  • 访问数组len复制给局部变量var len = arr.length;
  • 局部变量位于作用域链的起始位置
  • withtry{} catch(){}会改变作用域链,因此是动态作用域
  • 闭包需要更多内存开销
  • 内部属性[[scope]]包含了一个函数被创建的作用域中对象的集合,这个集合即函数的作用域链。
  • 含有闭包的函数执行时创建的活动对象运行期上下文作用域链中的第一个对象,其含有的闭包被创建时[[scope]]属性被初始化为这些对象;闭包中创建的标识符如var id = "xdi9592"位于作用域链第一个对象之后的位置。
  • hasOwnProperty
  • instanceOf
  • 嵌套成员,对象成员嵌套越深,访问速度越慢
  • 多次访问同一个对象成员,则需要做缓存,即将对象成员赋值给局部变量

第3章:DOM编程 35

  • 适当缓存访问到的DOM
  • 尽量减少操作DOM的次数
  • innerHTML优于原生创建DOM
  • 节点克隆优于原生创建DOM
  • 访问HTML集合拷贝到数组中,并设置局部变量
  • 缓存集合length属性
  • nextSibling优于childNodes
  • children优于childNodes
  • querySelectorAll优于getElementsByTagName()
  • 重排:浏览器将受影响的部分失效,重新构造渲染树;如增、删DOM、位置、尺寸、窗口
  • 重绘:完成重排后,重新绘制受影响的部分
  • 最小化重绘与重排
    • 缓存布局信息
    • 让元素脱离文档流
  • 事件委托:由于浏览器跟踪每个事件处理器占用很多内存,因此将事件代理到父元素

第4章:算法和流程控制

  • for;while;do{}while;for(var prop in object){}
  • for in 性能较差
  • 减少循环迭代次数,可以使用switch
  • 优化嵌套if-else
  • 调用栈溢出,适当改为迭代算法

第5章:字符串和正则表达式

  1. str += "one" + "two" 改为 str = str + "one" + "two" , IE8 以上提升性能
  2. strs.join(“”);在IE7中性能较好
  3. str = str.concat(s1);较慢
  4. 将正则表达式赋值给一个变量,提高性能
  5. 对于事先知道字符串的哪一部分将被测试时,适用字符串方法,如slide(),substr(),substring(),indexOf(),lastIndexOf()
  6. 回溯是正则性能的根源;利用互斥、反向引用
  7. trim方法,用两次正则比用一次正则好,如
    • str.replace(/^\s+/,"").replace(/\s+$/,"")
    • str.replace(“/^\s|\s+$/g”,””);
  8. 贪婪()比懒惰?好

第6章:快速响应的用户界面 107

  1. 浏览器UI线程:单线程
  2. 浏览器限制:

    • 调用栈大小限制
    • 长时间运行脚本限制
      • IE小于500万条语句
      • FF: 10s
      • Safari: 5s
      • Chrome: 无限制
  3. 定时器的使用

  4. 《可用性工程》
  5. Web Worker

6.1 浏览器UI线程 107
6.1.1 浏览器限制 109
6.1.2 多久才算“太久”? 110
6.2 使用定时器让出时间片段 111
6.2.1 定时器基础 112
6.2.2 定时器的精度 114
6.2.3 使用定时器处理数组 114
6.2.4 分割任务 116
6.2.5 记录代码运行时间 118
6.2.6 定时器与性能 119
6.3 Web Workers 120
6.3.1 Worker运行环境 120
6.3.2 与Worker通信 121
6.3.3 加载外部文件 122
6.3.4 实际应用 122
6.4 小结 124

第7章:Ajax 125

  1. XHR

    • GET参数限制小于2018
    • 跨域限制
  2. Dynamic

    • 可跨域
    • 只能GET
    • 不能设置请求头
    • 不能是纯CML、JSON,而必须封装在回调中,如
      • jsonback({"status":1})
  3. MXHR

    • PHP方法:base64-encode
    • 合并图片请求
      • src='data:img/jpeg;base64,........'

7.1 数据传输 125
7.1.1 请求数据 125
7.1.2 发送数据 131
7.2 数据格式 134
7.2.1 XML 134
7.2.2 JSON 137
7.2.3 HTML 141
7.2.4 自定义格式 142
7.2.5 数据格式总结 144
7.3 Ajax性能指南 145
7.3.1 缓存数据 145
7.3.2 了解Ajax类库的限制 148
7.4 总结 149

第8章:编程实践 151

8.1 避免双重求值(Double Evaluation) 151
8.2 使用Object/Array直接量 153
8.3 不要重复工作 154
8.3.1 延迟加载 154
8.3.2 条件预加载 156
8.4 使用速度快的部分 156
8.4.1 位操作 156
8.4.2 原生方法 159
8.5 小结 161

第9章:构建并部署高性能JavaScript应用

9.1 Apache Ant 163
9.2 合并多个JavaScript文件 165
9.3 预处理JavaScript文件 166
9.4 JavaScript压缩 168
9.5 构建时处理对比运行时处理 170
9.6 JavaScript的HTTP压缩 170
9.7 缓存JavaScript文件 171
9.8 处理缓存问题 172
9.9 使用内容分发网络(CDN) 173
9.10 部署JavaScript资源 173
9.11 敏捷JavaScript构建过程 174
9.12 小结 175

第10章:工具 177

10.1 JavaScript性能分析 178
10.2 YUI Profiler 179
10.3 匿名函数 182
10.4 Firebug 183
10.41 控制台面板分析工具 183
10.4.2 Console API 184
10.4.3 网络面板 185
10.5 IE开发人员工具 186
10.6 Safari Web查看器 188
10.6.1 描述文件面板 189
10.6.2 资源面板 191
10.7 Chrome开发人员工具 192
10.8 脚本阻塞 193
10.9 Page Speed 194
10.10 Fiddler 196
10.11 YSlow 198
10.12 dyna Trace Ajax Edition 199
10.13 总结 202

《心理学中的那些效应们》专题系列之(5)“速度正确率权衡现象”

2014-04-20 作者: NWZ

奥黛丽赫本

鱼和熊掌不能兼得。要么这个,要么那个。今天说的这个现象就是如此。做任务,要么很快的完成任务,但必然会有一些错误。要么一点错误也不犯,但要花很长时间来检查。这个现象在心理学中就叫做“速度-准确性权衡现象”。
科学的定义:速度—准确性权衡(speed-accuracy trade-off)是指反应时实验中,反应速度和反应准确性间的反向关系,这使得我们在做任务时必须在它们之间作出权衡。我们为了提高速度,那么正确率就会下降。为了提高准确率,那么反应速度就会下降。