网页应用安全指南/截断攻击、修剪攻击
外观
< 网页应用安全指南
如果截断影响比较(例如,在截断之前检查用户是否在黑名单中,然后截断名称以执行登录),那么截断输入可能会出现问题。如果 SQL 查询超过一定长度,则可能会被截断。这可用于执行具有明显不同含义的查询(例如,截断 WHERE
子句的一部分)。字符串也可以自动修剪(删除前导/尾随空格),导致相同漏洞(例如,检查输入 "eviluser␣" 是否在黑名单中,然后登录 "eviluser"). SQL 可能会自动进行此类修剪。
为了防止这种类型的攻击
- 避免截断输入。将过长输入视为错误。
- 如果截断是必要的,请确保在截断后检查值,并且只使用截断后的值
- 确保修剪不会发生,或者检查是一致的
- 引入长度检查
- 关注由于编码造成的不同长度
- 通过设置适当的 SQL MODE,确保 SQL 将截断的查询视为错误SQL 模式
基本原理
避免截断确保不会出现任何问题。如果应用截断,则在截断后执行所有必要的检查并仅使用截断后的值,这等同于在截断状态下接收值。相同的规则适用于修剪。长度检查可以防止由于长度限制而导致意外截断。需要考虑编码,因为 UTF-8 字符串的字节长度和字符长度可能不同。将 SQL MODE 设置为使截断导致错误,可以确保截断不能用于修改查询。但是,由此产生的错误仍然会导致查询意外失败,这应该以安全的方式处理。