首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >准备好的语句和二阶SQL注入

问准备好的语句和二阶SQL注入
EN

Stack Overflow用户
提问于 2014-03-29 07:19:29
回答 2查看 721关注 0票数 1

我在这里的某个地方读到,在PDO中使用预准备语句使您的应用程序只对一阶SQL注入免疫,但不能完全免疫二阶注入。

我的问题是:如果我们在包括SELECT查询在内的所有查询中都使用了预准备语句,而不仅仅是在INSERT查询中,那么二阶sql注入怎么可能呢?

例如,在以下查询中,没有机会进行二次注入:

写入:

代码语言:javascript
复制
INSERT INTO posts (userID,text,date) VALUES(?,?,?)

阅读:

代码语言:javascript
复制
SELECT * FROM posts WEHRE userID=?

删除:

代码语言:javascript
复制
DELETE FROM posts WHERE userID=?
EN

回答 2

Stack Overflow用户

发布于 2014-03-29 12:00:37

你所读到的简直是垃圾。写这篇文章的人根本没有头绪。

不应将预准备语句用于查询,而应将其用于数据。每次你必须在查询中添加一个变量时,你只能通过占位符来实现。因此,您的查询分离理论毫无意义:不管它是SELECT、ALTER、GRANT还是其他什么。唯一重要的是--是否有任何变量进入查询。

票数 2
EN

Stack Overflow用户

发布于 2014-03-29 17:07:01

由于大多数人鼓吹“用户是邪恶的”和“不要相信用户的输入”,人们可能会得到这样的印象:一旦数据进入数据库,它就是“可信的”。

但是SQL注入与可信和不可信的数据无关。SQL injection is the failure of ensuring that an SQL statement is interpreted as intended.

这就是准备好的语句/参数化发挥作用的地方,因为它是一种确保参数被解释为预期的技术,即作为数据而不是SQL代码。这应该应用于任何数据,无论其来源如何,也不管它是“可信的”还是“不可信的”,只是为了确保数据被解释为预期的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22724818

复制
相关文章

相似问题

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