在 Postgresql 上执行 SQL 查询时出现“值超出范围:溢出”错误

"Value out of range: overflow" error when executing SQL query on Postgresql

提问人:kawarizma 提问时间:2/24/2023 最后编辑:kawarizma 更新时间:2/24/2023 访问量:60

问:

我在为内部 CTF 实验室执行 SQL 查询时遇到问题,该查询给我“值超出范围:溢出”错误。 查询是这样的:

update users set active = true where id = INJECTION

我的目标是触发和错误条件,所以我使用了这个:

update users 
  set active = true 
where id = (select (case when (select 0)=1 then (select pow(999,9999)) else 10 end)); 

--->错误:值超出范围:溢出

update users 
  set active = true 
where id = (select (case when 0=1 then (select pow(999,9999)) else 10 end)); 

-->没有错误

为什么会这样?0=1 为 false,为什么执行带有 pow 函数的子查询?

PostgreSQL 安全性 SQL 注入

评论

0赞 2/24/2023
CASE 表达式不保证只计算相关分支。顺便说一句:整个表达式可以简化为无需使用 SELECT 查询包装对常量的每个引用。id = case when false then pow(...) else 10 end
0赞 Adrian Klaver 2/25/2023
阅读 CASE表达式评估

答: 暂无答案