Nat*_*ong 5 postgresql postgresql-9.3
是否可以将 aDELETE
作为 a 的子查询运行SELECT
?例如:
SELECT * FROM posts where title = (DELETE FROM posts returning 'whoops');
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,我得到syntax error at or near "FROM"
,指向FROM
的DELETE
,所以这似乎不可能,但也许我只是以某种方式做错了。
上下文:我试图了解某些 SQL 注入攻击可能造成的损害。在这种情况下,整个查询将在没有变量绑定的准备好的语句中运行。这意味着攻击者无法运行多个顶级语句,但我正在尝试评估子查询可能造成的损害。
编辑:我应该说,查询代码正在做类似的事情:
query_parameter = blindly_read_from_user_input()
# this is just interpolated into a string
db_query = "SELECT * FROM posts WHERE title = '#{query_parameter}'"
connection.prepare("query_name", db_query)
connection.exec_prepared("query_name")
Run Code Online (Sandbox Code Playgroud)
所以:
我正在尝试查看是否可以在此现有查询结构中基于 SQL 注入删除记录。
您可以DELETE
在 CTE - 这是一种不同类型的子查询。
但是对于这种简单的情况,您可能不需要它,您只需要使用RETURNING
并修复代码中的语法错误:
DELETE
FROM posts AS p
WHERE p.title = 'whoops'
RETURNING p.* ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1556 次 |
最近记录: |