首页/安全/漏洞与攻击面速查/排序与表名参数的处理方式
Web 漏洞原理与防护55 条

排序与表名参数的处理方式

ORDER BY 字段、表名、列名等位置无法使用参数占位符,容易被拼接入 SQL;正确做法是白名单映射:应用只接受预设键值,映射到固定 SQL 片段。

漏洞与攻击面速查安全更新于 2026-10-12

白名单映射示例(Python)

白名单映射示例(Python)
SORT_WHITELIST = {
    "name": "name",
    "created_at": "created_at",
    "score": "score",
}
col = SORT_WHITELIST.get(request.args.get("sort"), "created_at")
sql = f"SELECT * FROM items ORDER BY {col} ASC"   # col 来自白名单而非用户输入
白名单之外一律回退默认值;不要试图用关键字过滤或转义来处理这些位置。

易错点

  • 对 ORDER BY 位置直接使用占位符会报语法错误,开发者因此退回拼接——应改用白名单

数据来源与参考

  • OWASP SQL Injection Prevention Cheat Sheet(ORDER BY 场景)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌