输入验证
在 Web 应用安全上,如果我们不验证用户输入的数据,那是很危险的事情。我们通过”输入验证”和”数据清洗”技术来解决这些问题。这些验证应该在应用程序的每一个环节进行,值得一提的一点是验证程序必须在可信任的系统上运行(例如:在服务器端)。
如 OWASP SCP Quick Reference Guide 中所述, 共有16点是开发者在处理输入数据验证的时候需要注意的。在开发应用程序是,缺乏考虑这些安全问题是导致 Injection 排在 “OWASP Top 10“ 中第一名的主要原因。
在如今的 Web 应用中,与用户交互俨然是主流了。当一个 Web 应用包含了丰富的内容,与此同时用户交互和用户提交的数据量也在增加,因此如何针对用户输入进行验证遍扮演者不可或缺的角色。
当应用程序在处理用户数据的时候,用户的输入必须被认为是不安全的,而且只能在经过适当的验证处理过后,才可以接受用户数据。数据源也需要被标记为受信任和不受信任,如果是来自不受信任的数据,则必须要验证数据的安全性。
在本节中,我们会提供每个验证技术的概述,并且通过 Go 提供示例来说明每个技术。
- 验证
- 用户交互
- 白名单
- 边界检查
- 转义字符
- 数值验证
- 文件操作
- 数据源
- 跨系统一致性检查
- Hash统计
- 完整性限制
- 唯一性检查
- 查表检查
- 用户交互
- Post-validation Actions
- Enforcement Actions
- Advisory Action
- Verification Action
- Enforcement Actions
- 清洗
- 检查不合法的 UTF-8
- 转义单个小写字符(<)
- 移除所有标签
- 删除换行符,tabs 和多余的空格
- 分割字节
- URL 请求路径
- 检查不合法的 UTF-8