十大应用安全威胁
常见应用安全威胁(OWASP TOP 10) 2013
注入
失效的身份认证和会话管理
跨站脚本攻击(XSS)
不安全的直接对象引用
安全配置错误
敏感信息泄露
功能级访问控制缺失
跨站请求伪造(CSRF)
使用含有已知漏洞的组件
未验证的重定向和转发
风险评估标准

风险 = 可能性 * 影响
颜色越深,说明越容易发生,影响越大
1. 注入
SQL注入即为将表单中的数据输入到应用程序后台去,并干扰预定义的SQL命令执行。一个成功的SQL注入将导致以下结果:删除指定记录、插入无效数据以及可能触发数据库完整性约束。
- 从数据库获取敏感信息
- 更新数据库中的数据
- 完成一些与数据库相关的行政管理和维护操作 1
- 完成与操作系统相关的命令2
例子: username= " " 输入 or1=1or1= 这就是一个恒真命令
什么是注入: 用户的输入进入解释器
影响:
- CRUD数据
- 拖库
- OS命令
黑名单方法
最容易但同时也是最不牢靠
白名单方法
只接受我定义过的值
初级防御
- 参数化查询
- 存储过程
- 输入转义
额外防御
- 最小特权
- 白名单
2. 失效的身份认证和会话管理
验证 ----你是谁?
2. 授权 ----你能做什么?
- 密码 → 密码短语
- 令牌 →ATM卡
- 指纹 →生物特征
会话之Cookie管理
- Path -受限
- Domain -空值
- secure
- httponly
- expires
密码策略
- 最短长度
- 最少需含大小写字母
- 至少得有数字字符
- 必须包括非字母数字符号
- 密码失效状态
- 密码复出流程(即解密过程)
- 用于解密账户权限的机制
防止暴力破解
- 账号被禁用-----当用户的登录次数超过设定上限时被禁止使用
- 防机器人重复性的自动登录请求
3. XSS(跨站攻击)
反射机制:通过Pay\ load注入至会话/请求中实现功能调用
存储技术:Pay\ load数据被存储于数据库内以支持持久化操作
Web应用框架:基于DOM的技术使得Pay\ load指令直接作用于客户端界面
XSS能干嘛?
-
获取会话中的Cookie信息
- 更新网站内容
- 注入恶意JavaScript脚本
如何应对XSS攻击
-
获取会话中的Cookie信息
-
更新网站内容
-
注入恶意JavaScript脚本
如何应对XSS攻击 -
白名单 输入验证型
-
ESAPI 输出编码型
-
4. 不安全的直接对象引用
当开发者将一个内部引用暴露出来时
尽量避免直接暴露内部对象的应用。
采用难以预测且稳定的唯一标识符。
通过哈希校验确保数据完整性。
最后一步是对服务器端进行权限验证。
5. 安全配置错误
常犯的错误:
产品环境未设置默认密码
缺乏对操作系统、数据库、应用服务器以及Web服务器等的加强防护
影响:
后门
非授权访问数据
系统加固
安全基线
漏洞扫描
扫描工具(Nessus)
6. 敏感信息泄露
常犯的错误:
存储时
传输时
影响:
敏感/私人信息泄露
客户生气(信誉降低)
架构设计
哪些时敏感数据
采取保护
文件,数据库(字段)加密
标准化
使用已有的加密算法
密钥管理系统
- DEK3
- KEK 4
该怎么做
采取保护
- SSL/TLS
- HSTS
- Key pinning
正确使用
- TLS1.1,1.2 ,不要使用SSL3 TLS1.0
- 保护证书
- 验证证书
7. 功能级访问控制缺失
常犯的错误:
显示你能看到的菜单
客户端控制
影响:
越权访问
该怎么做
服务器端控制
- 始终在服务器端实施服务控制,并不涉及客户端
- 所有层次均应包括权限检测
数据权限控制
- 基于角色的访问(RBAC)
- 权限控制列表(ACL)
8. 跨站请求伪造(CSRF)
什么是跨站请求伪造
- 在浏览器中执行了不想执行的动作
- SessionID attached to request
影响
- 执行敏感操作
- 访问敏感数据
该怎么做
随机令牌
- 表单
- Ajax的Request header
多次验证
9. 使用已知含有漏洞的组件
常犯的错误:
开发者只关注自己开发的代码
不甚关心使用的第三方代码安全
影响:
漏洞继承
Exploit-db5
该怎么做
自动升级
自动检测最新版本
被动通知
10. 未验证的重定向和转发
常犯的错误:
重定向和灵活
未对目标URL进行校验
影响:
钓鱼
敏感信息泄露
该怎么做
验证目标网站
站内?站外?
白名单 --站外
相对路径 --站内
目标URL 的权限
- 数据管理操作 ↩︎
应用偶尔会调用PHP中的某些系统指令如SYSTEM、EXEC等当用户能够操控这些指令的参数时他们就能把恶意系统指令附加到正常指令上从而引发攻击这即是常见的OS注入漏洞
-
数据密钥 (简称DEK),它将数据进行加密,并作为该信息完整性检查的依据 ↩︎
-
密钥加密密钥 ↩︎
-
一个网站 ↩︎
