首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql预准备语句中的绑定过程

mysql预准备语句中的绑定过程
EN

Stack Overflow用户
提问于 2012-09-05 04:28:00
回答 2查看 166关注 0票数 6

众所周知,预准备语句可以很好地防御SQL注入攻击。

有人能解释一下在绑定过程中发生了什么吗?

我的困惑主要源于语句使用占位符,而这些占位符被变量替换。因此,如果变量包含恶意sql,那么它们仍然绑定在占位符的位置吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-05 04:42:02

不是,绑定过程确保绑定值与进入数据库的值是1:1匹配。

因此,'xxx;DROP TABLE yyy;‘作为一个值将是varchar字段中的实际值。当不使用参数绑定时,将执行此代码。

票数 1
EN

Stack Overflow用户

发布于 2012-09-05 05:08:28

首先,PDO清理DB引擎视为常量的内容,例如: INSERT子句上的值、WHERE子句上的比较值等等,但它不清理标识符、关键字或其他内容。(附注:它也不能清理动态SQL,因此如果使用动态SQL,您不能只依赖PDO )

关于您提出的问题,您应该注意到,在任何参数绑定上,您都提供了所需的绑定类型:字符串、数字或布尔值(或者其他,我不记得了)。所以事实是:

  • 声明的数值和布尔参数值不会注入危险的代码,因为它可以轻松地检查其对其类型的约束,并生成相应的文本。
  • 空值很容易转换为Null关键字。冲突的值,当然是

类型的,那么PDO在这里做什么呢?

  • ?它的杀菌方式与mysqli::real_escape_string相同。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12270886

复制
相关文章

相似问题

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