黑客攻防技术宝典 web实战 笔记 第二章
笔记
1.web应用程序的基本安全问题
所有用户输入都不可信。
2.web应用程序防御机制的核心因素
- 处理用户访问应用程序的数据与功能,防止为授权访问
- 处理用户对应用程序功能的输入,防止恶意输入
- 抵抗力,在应用程序受到攻击时可以正常运转,并采取防御和反攻的方式(waf,防火墙)
- 管理应用程序本身,帮助管理员监控行为,配置功能。
3.处理用户访问的安全机制
- 身份验证
- 回话管理
- 访问控制
4.身份验证
4.1 身份验证模型
要求用户提交用户名与密码,由应用程序对其进行核实,确认其合法性。
4.2 没有验证用户机制会发生什么
用户将被作为匿名处理,成为最低一级的信任。
4.3 身份验证其他功能
- 注册
- 账户恢复
- 密码修改
4.4 缺陷攻击
- 用户名猜解**—>验证码,访问次数
- 逻辑绕过—>任意用户登录,密码绕过
- sql注入—>sql语句未过滤
5.会话管理
5.1.令牌
令牌是一个唯一的字符串串,用来进行验证用户身份。
5.2 常见的实现方式
- Cookie
- token
- session
5.3 攻击面
- 令牌伪造
- 加密**
- 逻辑绕过
6.访问控制
简单的解释一下,就是什么样的用户权限,访问什么样的数据。还有就是什么样的用户使用什么样的功能。
eg:
普通用户访问普通数据
管理员访问管理员数据
6.1 攻击面
访问控制而言,这里的攻击面一般就是越权。
- 纵向越权(低权限用户拥有了高权限)
- 横向越权(某一个用户,拥有的其他平行权限的用户权限)
这里涉及到的逻辑一般有:
- 任意修改用户账号密码
- 任意删除用户账号
- 任意创建用户
- 数据遍历
- …
7.用户输入
7.1 防御用户输入的一般方法
输入确认 input validation
7.2 输入处理的方法
7.2.1 拒绝已知的不良输入
黑名单
攻击面:
局限性
它不可能包括所有的攻击方式。
7.2.2 接受已知的正常输入
白名单
只允许通过白名单上存在的内容
eg:
CSP
7.2.3 净化(过滤/转义)
对输入的内容进行过滤或者转义。
攻击面:
遗漏的未知的绕过方式
7.2.4 安全数据处理????
使用安全编程方法避免常见问题
7.2.5 语法检查
未授权访问,逻辑漏洞,身份检查
8. 边界确认
8.1 输入确认的不足
- 应用程序执行功能的广泛性以及技术的多样性。每一种攻击采用一组截然不同的专门设计数据。单独建立一种机制是很难满足的
- 进行转义和编码之后对之后该数据的操作难度
- 防御各种攻击的矛盾处
8.2 边界确认模型
在不同的组件或功能单元前或者说是边界前处理输入数据。
8.3 多步确认与规范化
多步确认就是说,在对字符串进行过滤或者删除的过程中,进行多步的确定
数据规范化,导致二次编码等问题。
8.4 处理攻击者
- 处理错误
- 维护审计日志
- 向管理员发出警报
- 应对攻击
8.5 处理错误
在一些情况下,攻击者能够利用存在缺陷的错误处理方法从错误消息中获取敏感信息。
8.6日志审计
- 所有身份验证功能有关的时间。
- 关键交易
- 被访问控制机制阻止的访问请求
- 任何高寒已知攻击字符串
有效的日志
- 时间的发生时间
- 发出请求的ip地址和用户的账户
8.7 向管理员发出警报
警报监控
- 应用反常,单独一个IP地址或用户发出的大量请求
- 交易反常,单独一个账户的转入和转出异常
- 包含已知攻击字符串的请求
- 请求中普通用户无法产看的数据被修改