首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可能的SQL注入删除带有存储过程的表?

可能的SQL注入删除带有存储过程的表?
EN

Stack Overflow用户
提问于 2012-02-11 18:49:03
回答 2查看 324关注 0票数 0

给定此MySQL存储过程:

代码语言:javascript
运行
复制
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注入,有什么方法可以解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-11 18:56:52

如果您的参数是varchar,并且您发送了一个字符串,那么是的,这是可能的,因为即使您使用PDO,它仍然是一个ANY字符串。

您应该将sdf定义为您的id类型(是整型吗?如果不是,则将其设置为整数!)然后,PDO参数将被转义并避免SQL注入。

一种好的做法是避免在存储过程中创建动态查询,而在应用程序中生成查询。

票数 -1
EN

Stack Overflow用户

发布于 2012-02-11 20:01:31

您只是错误地使用了预准备语句。

您必须绑定参数,而不是将它们连接在一起。

代码语言:javascript
运行
复制
DELIMITER // 
CREATE PROCEDURE customer.`getCustomers5`(sdf varchar(1000)) 
BEGIN 
  PREPARE stm1 from 'select * from customer.customertbl where id=?'; 
  SET @a = sdf;
  EXECUTE stm1 using @a; 
END//
DELIMITER ;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9239599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档