输入验证

在 Web 应用安全上,如果我们不验证用户输入的数据,那是很危险的事情。我们通过”输入验证”和”数据清洗”技术来解决这些问题。这些验证应该在应用程序的每一个环节进行,值得一提的一点是验证程序必须在可信任的系统上运行(例如:在服务器端)。

OWASP SCP Quick Reference Guide 中所述, 共有16点是开发者在处理输入数据验证的时候需要注意的。在开发应用程序是,缺乏考虑这些安全问题是导致 Injection 排在 “OWASP Top 10“ 中第一名的主要原因。

在如今的 Web 应用中,与用户交互俨然是主流了。当一个 Web 应用包含了丰富的内容,与此同时用户交互和用户提交的数据量也在增加,因此如何针对用户输入进行验证遍扮演者不可或缺的角色。

当应用程序在处理用户数据的时候,用户的输入必须被认为是不安全的,而且只能在经过适当的验证处理过后,才可以接受用户数据。数据源也需要被标记为受信任和不受信任,如果是来自不受信任的数据,则必须要验证数据的安全性。

在本节中,我们会提供每个验证技术的概述,并且通过 Go 提供示例来说明每个技术。

  • 验证
    1. 用户交互
      • 白名单
      • 边界检查
      • 转义字符
      • 数值验证
    2. 文件操作
    3. 数据源
      • 跨系统一致性检查
      • Hash统计
      • 完整性限制
      • 唯一性检查
      • 查表检查
  • Post-validation Actions
    1. Enforcement Actions
      • Advisory Action
      • Verification Action
  • 清洗
    1. 检查不合法的 UTF-8
      • 转义单个小写字符(<)
      • 移除所有标签
      • 删除换行符,tabs 和多余的空格
      • 分割字节
      • URL 请求路径