【发布时间】:2012-02-12 11:25:48
【问题描述】:
鉴于这个 MySQL 存储过程:
CREATE PROCEDURE customer.`getCustomers5`(
sdf varchar(1000)
)
BEGIN
set @se = concat('select * from customer.customertbl where id=', sdf);
PREPARE stm1 from @se;
EXECUTE stm1;
END;
即使调用此存储过程的前端使用 PDO 参数/数据绑定,是否可以将 SQL 注入到此存储过程中?
我需要在调用之前动态构建一个查询(动态 where 子句)。
如果可以进行SQL注入,有什么方法可以解决这个问题吗?
【问题讨论】:
-
stackoverflow.com/questions/60174/…。简而言之,使用 PDO,您应该是安全的。 aaand php.net/manual/en/pdo.prepared-statements.php
-
@SergeyBenner 看来你没有得到问题。
-
-1 提出了一个模糊的问题,结果是“不,我不是这个意思,代码完全不同”。
-
在您的示例代码中,如果您改为这样做
CREATE PROCEDURE customer.getCustomers5(sdf varchar(1000)) BEGIN select * from customer.customertbl where id=sdf; END;将无法进行 SQL 注入。但是是的,动态查询需要参数化,否则单独的 SP 不会提供任何防止 sql 注入的保护。
标签: php mysql sql sql-injection