【发布时间】:2017-08-31 07:08:00
【问题描述】:
使用绑定变量时如何进行 SQL 注入?
我的 DBA 说使用绑定变量并不能完全防止 SQL 注入,但我不知道这是怎么回事,因为绑定变量(尤其是字符串)通常会强制注入的 SQL 成为字符串在WHERE 子句中。
例子:
SELECT CUST_ID
FROM CUST.CUSTOMER
WHERE FIRST_NAME=:FNAME;
如果FNAME="SELECT FNMAME WHERE CUST_ID=10040",数据库将运行以下查询
SELECT CUST_ID
FROM CUST.CUSTOMER
WHERE FIRST_NAME="SELECT FNMAME WHERE CUST_ID=10040";
这将返回 0 行。
我在互联网上搜索了这个问题的答案,甚至搜索了这个网站,但我找不到。
再次感谢。
【问题讨论】:
-
您是否请您的 DBA 解释他们的意思?
-
如果您的 DBA 是正确的(他们不是),针对您的查询的 SQL 注入攻击尝试可能类似于
FNAME=SMITH' OR CUST_ID=10040 OR 'X'='X -
@AlexPoole,我的 DBA 说他在某处读过这篇文章,但必须具体找到他读到的地方。
标签: sql oracle sql-injection