为什么SQL查询不能直接用拼接的Cookie值来防注入?

2026-04-29 01:270阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计960个文字,预计阅读时间需要4分钟。

为什么SQL查询不能直接用拼接的Cookie值来防注入?

直接将 `Cookie` 中的值(例如 `session_id=abc123` 或 `user_token=xyz789`)用字符串拼接进 SQL 查询,等同于让攻击者任意控制查询逻辑。这并非可能被注入,而是必然可注入——因为 HTTP Cookie 完全由客户端控制,服务端未进行验证和参数化,所以任何客户端提供的 Cookie 值都会被直接用于查询,没有任何区分。

SELECT * FROM users WHERE token = ' + cookie_value + ' 是典型高危写法

这种拼接常见于老式登录校验或会话查找逻辑,例如在 Node.js 中用 mysql 模块、PHP 中用 mysqli::query、Java 中用 Statement.execute 等非参数化方式构造 SQL。

攻击者只需在 Cookie 中传入 user_token=' OR '1'='1,整条语句就变成:

SELECT * FROM users WHERE token = '' OR '1'='1'

结果是匹配全部用户,甚至配合注释符 -- 或分号 ; 还能执行多语句(取决于驱动是否启用多语句模式)。

阅读全文

本文共计960个文字,预计阅读时间需要4分钟。

为什么SQL查询不能直接用拼接的Cookie值来防注入?

直接将 `Cookie` 中的值(例如 `session_id=abc123` 或 `user_token=xyz789`)用字符串拼接进 SQL 查询,等同于让攻击者任意控制查询逻辑。这并非可能被注入,而是必然可注入——因为 HTTP Cookie 完全由客户端控制,服务端未进行验证和参数化,所以任何客户端提供的 Cookie 值都会被直接用于查询,没有任何区分。

SELECT * FROM users WHERE token = ' + cookie_value + ' 是典型高危写法

这种拼接常见于老式登录校验或会话查找逻辑,例如在 Node.js 中用 mysql 模块、PHP 中用 mysqli::query、Java 中用 Statement.execute 等非参数化方式构造 SQL。

攻击者只需在 Cookie 中传入 user_token=' OR '1'='1,整条语句就变成:

SELECT * FROM users WHERE token = '' OR '1'='1'

结果是匹配全部用户,甚至配合注释符 -- 或分号 ; 还能执行多语句(取决于驱动是否启用多语句模式)。

阅读全文