跳转到内容

网页应用安全指南/截断攻击、修剪攻击

来自维基教科书,开放的书籍,开放的世界

截断攻击、修剪攻击

如果截断影响比较(例如,在截断之前检查用户是否在黑名单中,然后截断名称以执行登录),那么截断输入可能会出现问题。如果 SQL 查询超过一定长度,则可能会被截断。这可用于执行具有明显不同含义的查询(例如,截断 WHERE 子句的一部分)。字符串也可以自动修剪(删除前导/尾随空格),导致相同漏洞(例如,检查输入 "eviluser␣" 是否在黑名单中,然后登录 "eviluser"). SQL 可能会自动进行此类修剪。

为了防止这种类型的攻击

  • 避免截断输入。将过长输入视为错误。
  • 如果截断是必要的,请确保在截断后检查值,并且只使用截断后的值
  • 确保修剪不会发生,或者检查是一致的
  • 引入长度检查
    • 关注由于编码造成的不同长度
  • 通过设置适当的 SQL MODE,确保 SQL 将截断的查询视为错误SQL 模式

基本原理

避免截断确保不会出现任何问题。如果应用截断,则在截断后执行所有必要的检查并仅使用截断后的值,这等同于在截断状态下接收值。相同的规则适用于修剪。长度检查可以防止由于长度限制而导致意外截断。需要考虑编码,因为 UTF-8 字符串的字节长度和字符长度可能不同。将 SQL MODE 设置为使截断导致错误,可以确保截断不能用于修改查询。但是,由此产生的错误仍然会导致查询意外失败,这应该以安全的方式处理。

华夏公益教科书