众所周知,预准备语句可以很好地防御SQL注入攻击。
有人能解释一下在绑定过程中发生了什么吗?
我的困惑主要源于语句使用占位符,而这些占位符被变量替换。因此,如果变量包含恶意sql,那么它们仍然绑定在占位符的位置吗?
发布于 2012-09-05 04:42:02
不是,绑定过程确保绑定值与进入数据库的值是1:1匹配。
因此,'xxx;DROP TABLE yyy;‘作为一个值将是varchar字段中的实际值。当不使用参数绑定时,将执行此代码。
发布于 2012-09-05 05:08:28
首先,PDO清理DB引擎视为常量的内容,例如: INSERT子句上的值、WHERE子句上的比较值等等,但它不清理标识符、关键字或其他内容。(附注:它也不能清理动态SQL,因此如果使用动态SQL,您不能只依赖PDO )
关于您提出的问题,您应该注意到,在任何参数绑定上,您都提供了所需的绑定类型:字符串、数字或布尔值(或者其他,我不记得了)。所以事实是:
类型的,那么PDO在这里做什么呢?
https://stackoverflow.com/questions/12270886
复制相似问题