占位符是如何防止sql注入的?_占位符怎样实现防止的sql注入-程序员宅基地

技术标签: pdo 占位符  

作者:eechen
链接:https://www.zhihu.com/question/43581628/answer/153629026
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

因为prepare是把SQL模板发给MySQL编译,然后execute是把用户输入的参数交给MySQL套模板执行.PHP模拟预处理的意思就是数据库并不会有编译模板这一步,而是PHP自动转义用户输入的参数,相当于手动调用mysqli_real_escape_string($_GET['id']) 或 PDO::quote($_GET['id']),比如PHP的一个Query Builder库medoo.php用的就是PDO::quote转义用户输入的参数后query执行SQL.

WireShark里用tcp.port==3306过滤分析PHP和MySQL通信可见:

 

但并非所有数据库都支持预处理,像SQLite就不支持.
所以PHP提供了模拟预处理(默认开启),其本质是转义用户输入,相关函数是:
PDO::quote和mysqli_real_escape_string.
在模拟预处理下,绑定参数(bindParam/bind_param)本质也是转义,而非SQL模板和参数分离.

安全的转义依赖统一的编码:
http://php.net/mysqli_real_escape_string
http://php.net/manual/zh/mysqlinfo.concepts.charset.php
MySQLi中需要先用 $mysqli->set_charset('utf8') 定义字符集后,
才能确保 $mysqli->real_escape_string() 能够安全正确转义用户输入的字符串.
PDO_MySQL中需要在PDO()中用 charset=utf8 定义字符集后,
才能确保 PDO::quote() 能够安全正确转义用户输入的字符串.
PHP模拟预处理时,PDO的bindParam/bindValue/execute转义时底层用的应该也是PDO::quote().

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42075590/article/details/81392121

智能推荐

2024年Vue最常见的面试题以及答案(面试必过),数据结构与算法面试题及答案_面试题 vue 数结构数据怎么组合-程序员宅基地

文章浏览阅读636次,点赞13次,收藏9次。基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。_面试题 vue 数结构数据怎么组合

表和索引的并行度问题_查看索引并行度-程序员宅基地

文章浏览阅读626次。表和索引的并行度问题_查看索引并行度

使用Anaconda的python安装虚拟环境出现错误_ps e:\backups\medical_qa> python manage.py d:\soft-程序员宅基地

文章浏览阅读7.6k次。 首先,你需要在终端命令窗口中执行pip install --user virtualenv 然后运行代码创建虚拟环境目录learning_logpython -m venv learning_log 之后报错:Error: Command '['C:\\Users\\shui02\\learning_log\\Scripts\\python.exe', '-Im', ..._ps e:\backups\medical_qa> python manage.py d:\software\anaconda3\python.exe:

Python入门(二) part2 元组_python二维元组-程序员宅基地

文章浏览阅读422次。目录一、元组的创建1.小括号创建2.tuple()方法转换3.元组生成器4.序列解包二、访问元组三、元组的更新和删除四、元组相关的操作符五、内置方法六、解压元组1.解压一维2.解压二维3.取指定元素定义:语法为(元素1, 元素2, ..., 元素n),用小括号把所有元素绑在一起,逗号将每个元素一一分开特征:元组内元素不能修改 但元组内元素的元素可以修改 元组可以使代码更安全 元组的访问速度比列表更快,开销更小 如果要定义一系列常_python二维元组

hive向mysql导数据_Mysql & Hive 导入导出数据-程序员宅基地

文章浏览阅读118次。---王燕行转列sqlselect split(concat_ws(',',collect_set(cast(smzq as string))),',')[1] ,split(concat_ws(',',collect_set(cast(smzq as string))),',')[2] from wyy;---mysql 导入 导出数据部分--mysql 导入load data infile..._hivesql into outfile

Node.js开发-path模块_前端代码 path-程序员宅基地

文章浏览阅读1.4k次,点赞10次,收藏8次。path 模块提供了。_前端代码 path

随便推点

2022年最新一篇文章教你青龙面板拉库,拉取单文件,安装依赖,设置环境变量,解决没有或丢失依赖can‘t find module之保姆教程(附带几十个青龙面板脚本仓库)_cannot find module 'ds-程序员宅基地

文章浏览阅读8.7w次,点赞29次,收藏441次。没有安装青龙面板的先看我另外一篇教程https://blog.csdn.net/qq_39997540/article/details/122363463?spm=1001.2014.3001.55011.青龙面板拉库打开浏览器进入按照我的主页里的另一篇教程安装好的青龙面板,点击右上角的添加任务编辑任务 1 0-23/1 * * *点击你添加好的拉库任务右边的运行按钮,过几分钟你要拉的库就下载到你的青龙面板了2.分享收集的青龙面板脚本仓库,建议选择拉一个就可以了1.JB库._cannot find module 'ds

hive 报错FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoo_hiveexception java.lang.runtimeexception: unable t-程序员宅基地

文章浏览阅读1.8k次。使用hive一段时间以后,今天在使用的时候突然报错,如下:hive> show databases;FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClientFAILED: Execu_hiveexception java.lang.runtimeexception: unable to instantiate org.apache.h

Python-爬虫(三):爬虫背景的系统性整理——HTML与正则_爬虫 html正则-程序员宅基地

文章浏览阅读317次。爬虫背景的系统性整理一、简单回顾网页结构1、查看网页源代码(1)浏览器选择Chrome 谷歌:本人首选Firefox 火狐:可查看 utf-8 编码中文,并且在源代码界面已排版(2)如何呼出:方法一:右击 - 查看源代码(静态构架)方法二:F12 或 设置-开发者工具 或 右击-检查(动态构架-即能够看到渲染后信息)(3)重点关注什么:【选择】按钮,即左上角的鼠标按钮【Elements】选项卡,即 html 原文与各可直接调试的元素,按多级目录排列小应用:可以删除广_爬虫 html正则

虚拟化应用(三)Hyper-V 2.0 初探-程序员宅基地

文章浏览阅读98次。前面两次我们主要测试了VMWare vSphere 4.1以及vCenter Server 4.1的基本操作,今天先把VMWare放一放,来关注下我们最熟悉的微软。Hyper-V是微软提出的服务器虚拟化解决方案,在微软的虚拟化战略中扮演了重要角色。微软的虚拟化解决方案分为三大部分:服务器虚拟化、桌面虚拟化、应用程序虚拟化。本次我们简要分析下Hyper-V,后面有时间再讨论其余两种虚拟化。测试脚..._hypervm 2.0

Springboot人才招聘管理系统-计算机毕设 附源码36930_springboot 实现一个飞书招聘系统-程序员宅基地

文章浏览阅读818次,点赞19次,收藏24次。本文人才招聘管理的功能要求出发,建立了人才招聘管理系统,系统中的主要分为管理员、求职用户、企业用户、三个部分,主要实现功能有:后台首页、个人管理、网站管理、内容管理、人员管理、职位信息、投递信息、面试通知等功能部分,经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与人才招聘管理系统实现的实际需求相结合,使用B/S结构、java开发语言、以及Mysql数据库等技术。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。_springboot 实现一个飞书招聘系统

Vue-Topo: 基于Vue的可视化拓扑图组件-程序员宅基地

文章浏览阅读607次,点赞4次,收藏10次。Vue-Topo: 基于Vue的可视化拓扑图组件项目地址:https://gitcode.com/Mirror198829/vue-topo在如今的Web开发中,数据可视化已经成为传递复杂信息、构建交互式界面的重要手段。Vue-Topo 是一个专为Vue.js框架设计的开源项目,它提供了一种优雅的方式来绘制和操作网络拓扑图,非常适合用于展示IT系统的架构、网络布局等场景。项目简介Vue-T..._vue 拓扑图前端组件

推荐文章

热门文章

相关标签