1. 首页 / 资源

探讨php中防止SQL注入最好的方法是什么

探讨php中防止SQL注入最好的方法是什么

如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子:

复制代码代码如下:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')");
这是因为用户可以输入类似VALUE“); DROP TABLE表; - ,使查询变成:
复制代码代码如下:
INSERT INTO table (column) VALUES('VALUE'); DROP TABLE table;'
我们应该怎么防止这种情况呢?请看下面
使用预备义语句和参数化查询。对于带有任何参数的sql语句都会被发送到数据库服务器,并被解析!对于攻击者想要恶意注入sql是不可能的!
实现这一目标基本上有两种选择:
1.使用PDO(PHP Data Objects ):

复制代码代码如下:
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute(array(':name' => $name));
foreach ($stmt as $row) {
// do something with $row
}
2.使用mysqli: 
复制代码代码如下:
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}
PDO(PHP数据对象)
注意当使用PDO访问MySQL数据库真正的预备义语句并不是默认使用的!为了解决这个问题,你必须禁用仿真准备好的语句。
使用PDO创建连接的例子如下: 
复制代码代码如下:
$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
在上面例子中错误模式ERRMODE不是严格必须的,但是建议添加它。当运行出错产生致命错误时,这种方法脚本不会停止。并给开发人员捕捉任何错误的机会(当抛出PDOException异常时)。
setAttribute()那一行是强制性的,它告诉PDO禁用仿真预备义语句,使用真正的预备义语句。这可以确保语句和值在发送给MySQL数据库服务器前不被PHP解析(攻击者没有机会注入恶意的SQL).
当然你可以在构造函数选项中设置字符集参数,特别注意'老'的PHP版本(5.3.6)会在DSN中忽略掉字符集参数。

 

Explanation(解释)
在你传递的sql预备义语句 被数据库服务器解析和编译会发生什么?通过指定的字符(在上面例子中像a?或者像:name)告诉数据库引擎你想要过滤什么.然后调用execute执行结合好的预备义语句和你指定的参数值.

这里最重要的是,该参数值是和预编译的语句结合的,而不是和一个SQL字符串.SQL注入的工作原理是通过欺骗手段创建的SQL脚本包括恶意字符串发送到数据库.因此,通过发送实际的分开的sql参数,你会降低风险.使用准备好的语句时,你发送的任何参数,将只被视为字符串(虽然数据库引擎可能会做一些参数的优化,当然最终可能会为数字).在上面的例子中,如果变量$name包含'sarah';DELETE * FROM employees,结果只会是一个搜索的字符串"'sarah';DELETE * FROM employees",你不会得到一个空表。

使用准备好的语句的另一个好处是,如果你在同一会话中多次执行相同的语句,这将只被解析和编译一次,给你一些的速度增长。
哦,既然你问如何进行插入,这里是一个例子(使用PDO):

复制代码代码如下:
$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');
$preparedStatement->execute(array(':column' => $unsafeValue));

相关推荐

  • 逸剑风云决武学秘籍代码有哪些?逸剑风云决武学秘籍代码

    逸剑风云决武学秘籍代码有哪些?逸剑风云决武学秘籍代码

    逸剑风云决武学秘籍代码有哪些?逸剑风云决武学秘籍代码使用攻略,代码,道具,秘籍,风云,数量,有哪些,攻略,武当,逸剑风云决武学秘籍代码是大家关心的,玩家可以在逸剑风云决中通过修改控制台代码来轻松的获取武学秘籍。因此想要知道这个代码有哪些,该怎么使用的小伙伴们,就让小编给大家详细的讲讲吧。逸剑风云决武学秘籍代码使用攻略秘籍代码使用方法开启ce,通过不断地改变同一个道具的数量直到找到道具数量地址,然后查看内存,从道具数量往前看,第一个不为0的值即道具代...

  • 王者荣耀峡谷寻宝好运口令8.14 最新峡谷寻宝好运口令

    王者荣耀峡谷寻宝好运口令8.14 最新峡谷寻宝好运口令

    王者荣耀峡谷寻宝好运口令8.14 最新峡谷寻宝好运口令代码分享,口令,峡谷,寻宝,活动,王者荣耀,宝箱,点击,输入,王者荣耀8月14日峡谷寻宝好运口令有哪些?峡谷寻宝每天都有最新的口令码,输入好运口令可以打开好运宝箱,宝箱里面的奖励还是很不错的,想要获得8月14日的好运口令代码,那么赶紧看看小编分享在下面的攻略。王者荣耀峡谷寻宝好运口令8.14活动:峡谷寻宝口令码:单一口令最多使用10次,请尽快使用防止失效。AQ8NOU3B15EB8351...

  • 电信座机取消呼叫转移代码 | 电信座机设置呼叫转移代

    电信座机取消呼叫转移代码 | 电信座机设置呼叫转移代

    电信座机取消呼叫转移代码 | 电信座机设置呼叫转移代码是多少,设置,取消,方法,座机,中国电信,1. 电信座机设置呼叫转移代码设置呼叫转移功能方法: 1.确认手机卡是否支持呼叫转移功能(联系运营商)。 2.电话图标-右上角更多-设定-其它设置-呼叫转移-始终转移/占线时转移/无人应答时转移/无法接通时转移-输入号码-点击启动。如需取消呼叫转移,点击禁用即可。 注:设置电信卡的呼叫转移,设置时会提示一个代码,在代码...

  • 电脑提取文字按什么键 | 电脑怎么复制文字快捷键

    电脑提取文字按什么键 | 电脑怎么复制文字快捷键

    电脑提取文字按什么键 | 电脑怎么复制文字快捷键,文字,快捷键,快捷方式,取消,转换,1. 电脑提取文字快捷键1、复制表格的时候要想不是图片而是文字版,只需要利用剪贴板即可轻松转换了。首先,打开要复制文字的excel,然后点击复制表格并打开剪贴板,如下图所示。2、其次,选择自己想要复制非人文字,从剪贴板中复制想要复制的文字 ,如下图所示。3、最后,只需要从编辑栏中把复制的这些文字,再复制到微信中就是文字...

  • 老款电视图像最佳设置参数是多少 | 老款电视图像最佳

    老款电视图像最佳设置参数是多少 | 老款电视图像最佳

    老款电视图像最佳设置参数是多少 | 老款电视图像最佳设置参数表,设置,图像,参数,参数设置,指标,1. 老款电视图像最佳设置参数1、电视最佳“对比度”“亮度”“色度”“清晰度”是没有一个固定值,只有适合自己的观看的图像模式,可以选择图像模式中的亮丽标准动态柔和四个选项中的“标准”。2、液晶电视的亮度是指亮度是指画面的明亮程度,它也是液晶电视的一项重要参数指标。合理的亮度可令我们的眼睛更舒适,同时也不会影响画面的色彩...

  • 电脑怎么截图复制图片 | 电脑上怎么截图复制图片

    电脑怎么截图复制图片 | 电脑上怎么截图复制图片

    电脑怎么截图复制图片 | 电脑上怎么截图复制图片,文字,键盘,全屏,显示,网页,1. 电脑上怎么截图复制1、首先打开一个需要将整个网页截图操作的网页页面。;2、然后找到电脑键盘上的“printscreen”按键(有的键盘上显示的缩写prtscn),该按键为截全屏的快捷按钮。;3、按下后如果不需要保存成图片即可直接粘贴到需要的位置即可。;4、如果需要将截屏的网页保存成图片,可以打开画图工具,将截屏粘...

  • convo变频器控制端子说明 | convo变频器参数说明书

    convo变频器控制端子说明 | convo变频器参数说明书

    convo变频器控制端子说明 | convo变频器参数说明书,变频器,参数,控制,恢复出厂设置,设置,1. convo变频器参数设定这个变频器的品牌是CONVO,生产单位是:博世力士乐(西安)传动与控制有限公司,不过,这个型号早在10年左右就停产了,取而代之的是FSCG032. dovol变频器参数怎么调1、“恢复出厂设置”:其中上电后进行一次恢复出厂设置,是为了避免变频器存在一些以前设置过的参数(当然若是全新变频器是...

  • 手机黏贴复制快捷键 | 手机屏幕复制粘贴的快捷键是哪

    手机黏贴复制快捷键 | 手机屏幕复制粘贴的快捷键是哪

    手机黏贴复制快捷键 | 手机屏幕复制粘贴的快捷键是哪个,快捷键,复制粘贴,设置,拷贝,选择,1. 手机屏幕复制粘贴的快捷键现在的手机都是采用全触屏设计,在交互设计上与此前的按键操作有了很多不一样的地方,那么在手机上怎么复制粘贴啊?下面就为您带来相关的介绍。 在手机上怎么复制粘贴啊? 1、在可以点选编辑文字的页面中,在文字处长按直到出现放大镜图标,松开手指就会出现选择的菜单,点击【选择】,或者是【全选】;...

  • 相机60d基本使用 | 60d摄像模式怎么设置参数

    相机60d基本使用 | 60d摄像模式怎么设置参数

    相机60d基本使用 | 60d摄像模式怎么设置参数,参数设置,模式,参数,设置,菜单,1. 60d拍人像的参数设置按menu进入菜单菜单的第二列第三项是照片风格按set进入分为标准人像风光中性单色等也可自定义实际上就是改动对比度饱和度清晰度等设置这些设置你可以在raw格式下,使用佳能的随机光盘里的软件dpp在电脑里重新修改设置此外60d提供了创意滤镜设置在菜单的第五列第五项可以使用滤镜,从而是照片风格改...

  • oppo r9plus参数详细参数 | oppo r9splus参数配置

    oppo r9plus参数详细参数 | oppo r9splus参数配置

    oppo r9plus参数详细参数 | oppo r9splus参数配置,参数配置,参数,配置,像素,详细参数,1. r9plus参数配置上市时间:2016产品类型:3G手机,4G手机,智能手机,平板手机,拍照手机,八核手机外观类型:直板体积(宽x高x厚):80.8 x 163 x 7.4mm主屏幕像素:1080x1920像素网络制式:TD-LTE/FDD-LTE/WCDMA/TD-SCDMA/CDMA2000/CDMA1X/G...

  • 电脑复制内容怎么复制 | 怎样复制电脑页面

    电脑复制内容怎么复制 | 怎样复制电脑页面

    电脑复制内容怎么复制 | 怎样复制电脑页面,插件,安装程序,系统环境,文件复制,复制粘贴,1. 电脑页面复制东西怎么复制拷贝程序,直接将程序的安装目录文件复制,然后粘贴在另外一台电脑上即可,但是拷贝后的程序是否可以使用主要取决于以下因素:1、一般的来说有些程序可以直接拷贝,然后在另外一台电脑上可以用;2、有些程序需要依赖于系统环境,如注册表,各种插件,环境变量等等,安装程序不止是吧程序解压到的电脑里,同时也...

  • 复制快捷键ctrl加什么复制 | 电脑复制粘贴快捷键ctrl

    复制快捷键ctrl加什么复制 | 电脑复制粘贴快捷键ctrl

    复制快捷键ctrl加什么复制 | 电脑复制粘贴快捷键ctrl加什么,快捷键,复制粘贴,键盘,位置,界面,1. 电脑复制粘贴快捷键ctrl加什并没有复制全部内容的快捷键,只能先通过Ctrl + A来全选,然后再使用Ctrl + C 来进行复制。在你想要复制内容的界面,然后使用快捷键“Ctrl + A”选中全部内容。再使用快捷键“Ctrl + C”复制全部内容。最后使用粘贴快捷键“Ctrl + V”将内容粘贴到相应的位置。这...

  • vs c++快捷键 | vs代码快捷键

    vs c++快捷键 | vs代码快捷键

    vs c++快捷键 | vs代码快捷键,快捷键,运行,设置,属性,热键,1. VS中快捷键基本跟VS05没多大的区别,下面是个人在开发时比较常用到的,也欢迎路过的朋友们发表下你们常用的热键。设置文档格式,就是帮你代码排列。热键Ctrl+K Ctrl + D,在VS05里是Ctrl+E Ctrl+DShift + Delete 删除当前光标所在的整行。F7 查看对应的代码 SHIFT + 7...

  • 尼康相机D90使用方法图解 入门教程 | 尼康d90参数设置

    尼康相机D90使用方法图解 入门教程 | 尼康d90参数设置

    尼康相机D90使用方法图解 入门教程 | 尼康d90参数设置教程,设置,参数,参数设置,教程,尼康,1. 尼康d90设置参数技巧尼康D90单反相机功能键介绍说明如下:1、电源开关、快门按键等说明。2、感光选择、照片选择的按键说明。3、对焦选择、背屏参数等按键说明。4、拨轮功能、测光选择等按键说明。5、照片回放等按键说明。6、菜单、设置、删除等按键说明。7、镜头锁、对焦模式选择按键说明。8、自定义功能按键、景深预览等功...

  • 金田刻字机设置参数 | 金田刻字机怎么刻字

    金田刻字机设置参数 | 金田刻字机怎么刻字

    金田刻字机设置参数 | 金田刻字机怎么刻字,参数,设置,使用教程,使用说明,皮卡,1. 金田刻字机使用说明目前国内品牌有,腾宇,皮卡, 工正, 力宇 ,远海, 力刻, 恒星, 恒丰, 金田,银田 等,国外品牌有GRAPHTEC(日图)星云, 诠脑,奥莱等。2. 刻字机说明书连接电源,安装刀片,放置介质,设定参数,开始试刻,利用计算机传递数据。3. 金田刻字机设置参数分别以“虎门销烟”、“金田起义”、...

  • 快捷键复制粘贴用不了 | 快捷键复制粘贴数值

    快捷键复制粘贴用不了 | 快捷键复制粘贴数值

    快捷键复制粘贴用不了 | 快捷键复制粘贴数值,快捷键,复制粘贴,键盘,设置,选择,1. 快捷键的复制粘贴电脑怎么设置复制粘贴快捷键步骤如下:1、首先需要按住键盘上”Ctrl“键不放,点击”C“键就是复制,同理”Ctrl+V“就是黏贴。2、接着需要选择一段文字,然后点击键盘上的”Ctrl+C“快捷键即可复制这段文字。3、最后只需要在空白处按下”Ctrl+V“键即可黏贴这段文字,这就解决了电脑复制和粘贴...

  • 华为光猫hg8342r参数 | 华为hg8120c光猫参数

    华为光猫hg8342r参数 | 华为hg8120c光猫参数

    华为光猫hg8342r参数 | 华为hg8120c光猫参数,参数,华为,连接,宽带,浏览器,1. 华为hg8145c光猫参数华为光猫HG8145C有1个千兆网口。1、华为光猫HG8145C有四个接入网口,其中网口1是千兆网口。2、华为光猫HG8145C正确的连接方式。3、华为光猫HG8145C连接宽带方法:把光纤、网线、连接好,光猫网口1直接接电脑网口,等光猫启动之后 在浏览器上面输192.168.1.1。2...

  • fanuc 刀库复位 | fanuc刀库门关闭代码

    fanuc 刀库复位 | fanuc刀库门关闭代码

    fanuc 刀库复位 | fanuc刀库门关闭代码,复位,归零,指令,系统,方法,1. fanuc刀库归零调到手动,有个刀库转动的按钮+F1一起按就可以了,这是把刀库卡住了,以后等刀库停了在复位。其实换刀也是个宏程序程序还没玩你一按复位就卡拿了 2. fanuc刀库回零指令m681.减速开关回参考点。传统的回零方式(挡块),a回参考点快速回零b撞挡块减速速度c脱离挡块寻找一转信号。 2.无减速开...

  • excel折叠行展开功能 | excel折叠行复制粘贴

    excel折叠行展开功能 | excel折叠行复制粘贴

    excel折叠行展开功能 | excel折叠行复制粘贴,折叠,复制粘贴,恢复,设置,标签,1. Excel折叠行方法:使用”组合“命令即可。;1、打开EXCEL表格,选中要折叠(组合)的行,点击”数据“--组合。;2、 之后,1~6行单元格就被组合在一起,这时按”1“或者”-“号可收起。;3、如果想看折叠后的内容,可点击”2“或者”+“号。2. excel折叠行怎么设置1、打开EXCEL表格,选中要折叠(组...

  • 怎么改手机配置参数表 | 怎么提高手机配置参数

    怎么改手机配置参数表 | 怎么提高手机配置参数

    怎么改手机配置参数表 | 怎么提高手机配置参数,配置参数,参数,修改,配置,设置,1. 怎么改手机配置参数方法/步骤1/5分步阅读打开手机桌面上的【工具】。2/5在工具中选择【设置】,点击打开。3/5在手机设置中点击【更多设置】。4/5在更多设置中点击【关于手机】。5/5在关于手机界面的【处理器】选项后面即可看到详细的配置参数。vivo s9搭载三星的1080处理器,是一款全新的5nm制作工艺的手机...