《白帽子讲web安全》
简介
安全三要素
- 机密性——保护数据内容不能泄露,加密是实现机密性要求的常见手段
- 完整性——保护数据内容是完整的,没有被篡改的。常见的保证一致性的技术手段是数字签名
- 可用性——保护资源是“随需而得”
安全评估
资产等级分析 -> 威胁分析 -> 风险分析 -> 确认解决方案
客户端安全
跨站脚本攻击(XSS)
英文全称是Cross Site Script,本来缩写是CSS,为了和层叠样式表区别,在安全领域叫做“XSS” XSS根据效果的不同,分为以下几类
- 反射型XSS
- 储存型XSS
- DOM Based XSS
XSS攻击
XSS Payload:XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSS Payload”
- Cookie 劫持
- 构造GET、POST请求
XSS构造
- 利用字符编码
- 绕过长度限制
- 使用
标签 - window.name
XSS的防御
- HttpOnly
- 输入检查
- 输出检查
跨站点请求伪造(CSRF)
攻击方式
- 浏览器的Cookie策略
- P3P头的副作用
- GET/POST请求
- Flash CSRF
CSRF的防御
- 验证码
- Referer Check
- Token
点击劫持(ClickJacking)
点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上
攻击方式
- Flash点击劫持
- 图片覆盖攻击
- 拖拽劫持与数据窃取
- 触屏劫持
防御
- frame busting
if ( top.location != self.location ) {
top.location = self.location;
}
- X-Frame-Options
- DENY
- SAMEORIGIN
- ALLOW-FROM origin
HTML 5 安全
- 新标签的XSS:例如video/audio
- iframe的sandbox:加载的内容被视为一个独立的“源”
- a标签和area标签,定义一个新的Link Types: noreferrer
- postMessage
- Web Storage
服务端安全
注入攻击
SQL注入
- 盲注 在服务器没有错误回显时完成的注入攻击。最常见的盲注验证方法是,构造简单的条件语句,根据返回页面是否发生变化,来判断SQL语句是否得到执行。
- Timing Attack 在Mysql中,有一个benchmark函数,它是用于测试函数性能的。可以让同一个函数执行若干次,使得结果返回的时间比平时要长;通过时间长短的变化,可以判断出注入语句是否执行成功。
防御
数据与代码分离原则
- 使用预编译语句
- 使用存储过程
- 检查数据类型
- 使用安全函数
认证与会话管理
- 认证:认出用户是谁
- 授权:决定用户能够做什么
Session与认证
SessionID加密后,保存在cookie中。Cookie泄露包含XSS攻击、网络嗅探、本地木马窃取
Session Fixation攻击
登录前后,SessionId不变,则会使得X诱使Y打开一个URL,该URL中携带着X的SessionID;解决方法是登陆完成后,重写SessionID
Session保持攻击
通过篡改Cookie的有效期,使得Session不过期。解决方法是一定时间后,强制销毁Session
单点登录(SSO)
- 优点:风险集中化
- 缺点:单点被攻破,所有单点系统均受影响
最为流行的单点登录系统框架是OpenID
访问控制
在web应用中,常见的访问控制可以分为“基于URL的访问控制”、“基于方法的访问控制”和“基于数据的访问控制”
垂直权限管理
基于角色的访问控制,RBAC 不同角色的权限有高低之分。如果一个本属于低权限角色的用户通过一些方法能够获得高权限角色的能力,则发生了“越权访问”。 在配置权限时,应当使用“最小权限原则”,并使用“默认拒绝”的策略,只对有需要的主体单独配置“允许”的策略。
水平权限管理
A、B同属于某个角色,而不判断A是否有权限访问B的数据,因此发生了越权
OAuth简介
OAuth2.0:https://oauth.net/2/ 3个角色:
- Client:客户端
- Resource Owner:用户
- Service Provider:服务提供方 OAuth2.0翻译:http://colobu.com/2017/04/28/oauth2-rfc6749/