亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

使用PDO防sql注入的原理分析

2024-07-25 19:09:22
字體:
供稿:網(wǎng)友

前言

本文使用pdo的預(yù)處理方式可以避免sql注入。下面話不多說了,來一起看看詳細(xì)的介紹吧

在php手冊(cè)中'PDO--預(yù)處理語(yǔ)句與存儲(chǔ)過程'下的說明:

  • 很多更成熟的數(shù)據(jù)庫(kù)都支持預(yù)處理語(yǔ)句的概念。什么是預(yù)處理語(yǔ)句?可以把它看作是想要運(yùn)行的 SQL 的一種編譯過的模板,它可以使用變量參數(shù)進(jìn)行定制。預(yù)處理語(yǔ)句可以帶來兩大好處:
  • 查詢僅需解析(或預(yù)處理)一次,但可以用相同或不同的參數(shù)執(zhí)行多次。當(dāng)查詢準(zhǔn)備好后,數(shù)據(jù)庫(kù)將分析、編譯和優(yōu)化執(zhí)行該查詢的計(jì)劃。對(duì)于復(fù)雜的查詢,此過程要花費(fèi)較長(zhǎng)的時(shí)間,如果需要以不同參數(shù)多次重復(fù)相同的查詢,那么該過程將大大降低應(yīng)用程序的速度。通過使用預(yù)處理語(yǔ)句,可以避免重復(fù)分析/編譯/優(yōu)化周 期。簡(jiǎn)言之,預(yù)處理語(yǔ)句占用更少的資源,因而運(yùn)行得更快。
  • 提供給預(yù)處理語(yǔ)句的參數(shù)不需要用引號(hào)括起來,驅(qū)動(dòng)程序會(huì)自動(dòng)處理。如果應(yīng)用程序只使用預(yù)處理語(yǔ)句,可以確保不會(huì)發(fā)生SQL 注入。(然而,如果查詢的其他部分是由未轉(zhuǎn)義的輸入來構(gòu)建的,則仍存在 SQL 注入的風(fēng)險(xiǎn))。
  • 預(yù)處理語(yǔ)句如此有用,以至于它們唯一的特性是在驅(qū)動(dòng)程序不支持的時(shí)PDO 將模擬處理。這樣可以確保不管數(shù)據(jù)庫(kù)是否具有這樣的功能,都可以確保應(yīng)用程序可以用相同的數(shù)據(jù)訪問模式。  

下邊分別說明一下上述兩點(diǎn)好處:

1.首先說說mysql的存儲(chǔ)過程,mysql5中引入了存儲(chǔ)過程特性,存儲(chǔ)過程創(chuàng)建的時(shí)候,數(shù)據(jù)庫(kù)已經(jīng)對(duì)其進(jìn)行了一次解析和優(yōu)化。其次,存儲(chǔ)過程一旦執(zhí)行,在內(nèi)存中就會(huì)保留一份這個(gè)存儲(chǔ)過程,這樣下次再執(zhí)行同樣的存儲(chǔ)過程時(shí),可以從內(nèi)存中直接中讀取。mysql存儲(chǔ)過程的使用可以參看:http://www.49028c.com/article/7032.htm

對(duì)于PDO,原理和其相同,只是PDO支持EMULATE_PREPARES(模擬預(yù)處理)方式,是在本地由PDO驅(qū)動(dòng)完成,同時(shí)也可以不使用本地的模擬預(yù)處理,交由mysql完成,下邊會(huì)對(duì)這兩種情況進(jìn)行說明。

2.防止sql注入,我通過tcpdump和wireshark結(jié)合抓包來分析一下。

在虛擬機(jī)上執(zhí)行一段代碼,對(duì)遠(yuǎn)端mysql發(fā)起請(qǐng)求:

<?php$pdo = new PDO("mysql:host=10.121.95.81;dbname=thor_cms;charset=utf8", "root","qihoo@360@qihoo");$st = $pdo->prepare("select * from share where id =? and uid = ?");$id = 6;$uid = 521;$st->bindParam(1, $id);$st->bindParam(2, $uid);$st->execute();$ret = $st->fetchAll();print_r($ret);

通過tcpdump抓包生成文件:

tcpdump -ieth0 -A -s 3000 port 3306 -w ./mysql.dumpsz mysql.dump

通過wireshark打開文件:

PDO,sql注入

可以看到整個(gè)過程:3次握手--Login Request--Request Query--Request Quit

查看Request Query包可以看到:

PDO,sql注入

咦?這不也是拼接sql語(yǔ)句么?

其實(shí),這與我們平時(shí)使用mysql_real_escape_string將字符串進(jìn)行轉(zhuǎn)義,再拼接成SQL語(yǔ)句沒有差別,只是由PDO本地驅(qū)動(dòng)完成轉(zhuǎn)義的(EMULATE_PREPARES)

這種情況下還是有可能造成SQL 注入的,也就是說在php本地調(diào)用pdo prepare中的mysql_real_escape_string來操作query,使用的是本地單字節(jié)字符集,而我們傳遞多字節(jié)編碼的變量時(shí),有可能還是會(huì)造成SQL注入漏洞(php 5.3.6以前版本的問題之一,這也就解釋了為何在使用PDO時(shí),建議升級(jí)到php 5.3.6+,并在DSN字符串中指定charset的原因)。

針對(duì)php 5.3.6以前版本,以下代碼仍然可能造成SQL注入問題:

$pdo->query('SET NAMES GBK'); $var = chr(0xbf) . chr(0x27) . " OR 1=1 /*"; $query = "SELECT * FROM info WHERE name = ?"; $stmt = $pdo->prepare($query); $stmt->execute(array($var));

而正確的轉(zhuǎn)義應(yīng)該是給mysql Server指定字符集,并將變量發(fā)送給MySQL Server完成根據(jù)字符轉(zhuǎn)義。

那么,如何才能禁止PHP本地轉(zhuǎn)義而交由MySQL Server轉(zhuǎn)義呢?

PDO有一項(xiàng)參數(shù),名為PDO::ATTR_EMULATE_PREPARES ,表示是否使用PHP本地模擬prepare,此項(xiàng)參數(shù)默認(rèn)true,我們改為false后再抓包看看。

先在代碼第一行后添加

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

再次用tcpdump抓包,通過wireshark我們可以看到:

PDO,sql注入

php對(duì)sql語(yǔ)句發(fā)送采用了prepare--execute方式

PDO,sql注入

PDO,sql注入

這次的變量轉(zhuǎn)義處理交由mysql server來執(zhí)行。

既然變量和SQL模板是分兩次發(fā)送的,那么就不存在SQL注入的問題了,但明顯會(huì)多一次傳輸,這在php5.3.6之后是不需要的。

使用PDO的注意事項(xiàng)

1.  php升級(jí)到5.3.6+,生產(chǎn)環(huán)境強(qiáng)烈建議升級(jí)到php 5.3.9+ php 5.4+,php 5.3.8存在致命的hash碰撞漏洞。

2. 若使用php 5.3.6+, 請(qǐng)?jiān)谠赑DO的DSN中指定charset屬性。小于5.3.6 : $dbh = new PDO($dsn,$user,$pass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));

3. 如果使用了PHP 5.3.6及以前版本,設(shè)置PDO::ATTR_EMULATE_PREPARES參數(shù)為false(即由MySQL server進(jìn)行變量處理),php 5.3.6以上版本已經(jīng)處理了這個(gè)問題,無(wú)論是使用本地模擬prepare還是調(diào)用mysql server的prepare均可。

4. 如果使用了PHP 5.3.6及以前版本, 因Yii框架默認(rèn)并未設(shè)置ATTR_EMULATE_PREPARES的值,請(qǐng)?jiān)跀?shù)據(jù)庫(kù)配置文件中指定emulatePrepare的值為false。 

注:

1.為什么在DSN中指定了charset, 還需要執(zhí)行set names <charset>呢?

其實(shí)set names <charset>有兩個(gè)作用:

  告訴mysql server, 客戶端(PHP程序)提交給它的編碼是什么

      告訴mysql server, 客戶端需要的結(jié)果的編碼是什么

也就是說,如果數(shù)據(jù)表使用gbk字符集,而PHP程序使用UTF-8編碼,我們?cè)趫?zhí)行查詢前運(yùn)行set names utf8, 告訴mysql server正確編碼即可,無(wú)須在程序中編碼轉(zhuǎn)換。這樣我們以u(píng)tf-8編碼提交查詢到mysql server, 得到的結(jié)果也會(huì)是utf-8編碼。省卻了程序中的轉(zhuǎn)換編碼問題,不要有疑問,這樣做不會(huì)產(chǎn)生亂碼。

那么在DSN中指定charset的作用是什么? 只是告訴PDO, 本地驅(qū)動(dòng)轉(zhuǎn)義時(shí)使用指定的字符集(并不是設(shè)定mysql server通信字符集),設(shè)置mysql server通信字符集,還得使用set names <charset>指令。

2.PDO::ATTR_EMULATE_PREPARES屬性設(shè)置為false引發(fā)的血案:http://my.oschina.net/u/437615/blog/369481

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
在线观看网站黄| 久久涩涩网站| 2018国产在线| av福利在线| 91麻豆精品视频| 啦啦啦高清在线观看www| 国产福利热线视频| 日本三级韩国三级欧美三级| 国产三级视频在线看| 55av亚洲| 欧美视频在线观看一区二区| 亚洲免费在线| 亚洲经典一区| 久久99国产精品久久99果冻传媒| 亚洲三级网址| 福利视频999| 经典一区二区| 国产伦精品一区二区三区免费迷| 看黄色一级大片| 欧美天天综合网| 欧美无砖专区免费| 欧美区国产区| 紧身裙女教师波多野结衣| 成年网站免费入口在线观看| 国产精品一区二区91| 中国动漫在线观看完整版免费| 国产午夜精品一区在线观看| 欧美一区二区三区免费观看| 无码免费一区二区三区免费播放| 中文在线资源新版官网| 人与牲动交xxxxbbb| 亚洲精品久久久久久久蜜桃| 爱啪啪综合导航| 国产精品久99| 久久婷婷五月综合色丁香| 97精品在线观看| 日本一级片在线播放| 国产精选一区二区三区| 又粗又硬又爽国产视频| 成人在线网址| 国内精品久久久久影院 日本资源| 电影久久久久久| 亚洲激情免费观看| 一本一生久久a久久精品综合蜜| 国产精品沙发午睡系列| 亚洲啊v在线免费视频| 亚洲av成人无码久久精品| 香蕉成人在线| 亚洲人成伊人成综合网小说| 国产亚洲永久域名| 成人永久看片免费视频天堂| 国产日韩欧美亚洲| 在线观看v片| 成人在线视频一区二区| 日韩电影免费观看中文字幕| 日本午夜视频在线观看| 在线观看免费观看在线91| 99精品视频在线播放免费| 久久久久久香蕉| 狠狠色噜噜狠狠狠狠888奇米| 3344国产精品免费看| 夜夜摸视频网| 亚洲欧美日韩精品久久| 国产99久久久国产精品免费看| 欧美日韩精品在线观看| 欧美性生交xxxxxdddd| 日本一道本久久| 97在线免费观看视频| 成人国产精品色哟哟| 亚洲成人动漫av| 精品sm在线观看| 天堂在线精品| 亚洲欧美国产日韩中文字幕| 成人羞羞网站入口免费| 四虎影视国产在线视频| 国产又大又黄又粗又爽| 欧美另类极品videosbestfree| 国产又黄又猛又粗| 免费观看羞羞视频网站| 97精品国产91久久久久久| 日韩欧美视频在线| 久久在线免费观看| 毛片av一区二区| 高清欧美一区二区三区| 少妇愉情理伦片bd| 九色porny丨首页入口在线| 国产又粗又爽又黄的视频| 国产大片免费看| 成人片免费看| 免费看一区二区三区| 高清中文字幕在线| 91国拍精品国产粉嫩亚洲一区| 中文字幕在线观看一区二区| 91精品国产综合久久久蜜臀九色| 亚洲成人激情av| 黑料不打烊so导航| 国产精品啊啊啊| 激情在线视频| 色欧美乱欧美15图片| 在线观看欧美日韩| 久久精品国产第一区二区三区最新章节| 师生出轨h灌满了1v1| 在线免费观看视频| 久无码久无码av无码| 夜夜嗨aⅴ免费视频| 亚洲欧美一区二区三区在线观看| 欧美大电影免费观看| 中文字幕在线观看一区二区| 国产精品日韩在线播放| www.xxx黄| 91高清视频在线观看| 99精品视频免费版的特色功能| 久久五月精品| 国产97在线视频| 婷婷综合久久中文字幕蜜桃三电影| 亚洲国产精品t66y| 日韩欧美国产高清| 日本不卡电影| 中文字幕精品一区二区精品绿巨人| 亚洲区小说区图片区qvod按摩| 日韩精品视频中文字幕| 一区视频免费观看| 九九视频九九热| 成年人深夜福利| 97影院理论片在线播放| www国产精品av| 国产精品无码久久久久| 久久久久av| 国产传媒第一页| 99re66热这里只有精品8| www在线播放| 国产精欧美一区二区三区蓝颜男同| 嫩草影院一区二区三区| 久久久国产精品一区二区中文| 4438全国成人免费| 日本一级免费视频| 亚洲综合中文字幕68页| 日韩av中文在线| 久久国产黄色片| 国产一卡2卡3卡四卡网站| 亚洲一卡二卡三卡四卡无卡网站在线看| 亚洲精品中文字幕在线播放| 正在播放亚洲1区| 免费女人毛片视频| 天堂资源在线亚洲资源| 国产成人精品免费看在线播放| 好吊色视频一区二区| 国产精品拍拍拍| 亚洲bt欧美bt日本bt| 亚洲第一精品电影| 日韩亚洲第一页| 久久精品成人动漫| 亚洲最大的成人网| 亚洲乱码国产乱码精品精软件| 成人18视频免费69| 极品尤物一区二区三区| 亚洲区小说区| 国产露出视频在线观看| 欧美激情导航| 972aa.com艺术欧美| 国产av国片精品| 在线观看免费av片| 雨宫琴音一区二区在线| 欧美整片在线观看| 色18美女社区| 久久精品国产综合| 国产麻豆视频网站| 日韩免费观看网站| 日韩精品一区二区三区中文字幕| 国内外成人免费激情在线视频| 国产婷婷成人久久av免费高清| 日韩在线卡一卡二| h在线免费观看| 国语自产精品视频在线看抢先版结局| 国产黄色片免费看| 久久精品亚洲天堂| 国产欧美一区二区三区精品酒店| 色先锋av男人资源先锋影院| 久久久国产精品x99av| 久久久久久久久国产| 激情偷拍久久| 91精品国产综合久久久久久| 亚洲一区二区久久久久久| av在线免费播放网址| 无码aⅴ精品一区二区三区浪潮| 一区二区三区国产好的精华液| 欧美日韩视频不卡| 毛片视频免费观看| 久久精品亚洲人成影院| 欧美日韩一区二区三区电影| 欧美大片在线看| 一区二区三区在线视频免费| 亚洲福利在线播放| 亚洲免费资源| 成人无遮挡免费网站视频在线观看| 另类天堂视频在线观看| 国产精品电影网站| 久久在线免费观看| 爱爱免费小视频| 亚洲第一欧美| 久久av一区二区三区亚洲| 精品欧美不卡一区二区在线观看| 亚洲欧洲黄色网| 在线观看免费av网址| theporn国产在线精品| 中文字幕av影院| 在线播放av网站| 精国产品一区二区三区a片| 亚洲国产aⅴ精品一区二区三区| 国产精品7777| 伊人久久亚洲美女图片| 国产xxxxxx久色视频在| 91精品中文字幕| 男人女人靠逼视频| 色婷婷综合久久久久中文字幕| 欧美一二区在线观看| 1024手机在线视频| 欧美夫妇交换xxx| 亚洲午夜精品一区 二区 三区| 怡红院在线播放| 欧美在线观看视频一区二区| 国产精品7777| 特级西西444www大精品视频| 日夜操在线视频| 四虎成人免费观看在线网址| 亚洲免费av在线| 97超级在线观看免费高清完整版电视剧| 中文字幕日本三级| 中文字幕人妻熟女人妻洋洋| 国产精品国产三级国产专播精品人| 日韩三级在线观看| 国产在线视频一区| 国产成人精品毛片| 国产厕拍一区| 黄色网页网址在线免费| 色偷偷88888欧美精品久久久| 天堂在线视频免费| 黄色三级网站在线观看| 在线国产视频一区| 国产剧情麻豆剧果冻传媒视频免费| 亚洲aaa视频| 一本色道久久88亚洲综合88| 国产欧美日本亚洲精品一4区| 深夜福利av| 色香蕉成人二区免费| 久久亚洲精品中文字幕| 国产成人在线观看免费网站| av电影一区二区三区| 娇小11一12╳yⅹ╳毛片| 久久久久久久9| 亚洲三级视频| 亚洲第一成人在线| 国产稀缺精品盗摄盗拍| 中文字幕影片免费在线观看| 国产亚洲精品高潮| 亚洲天堂在线播放| 四虎国产精品永久在线国在线| 超碰在线94| 中文字幕免费观看视频| 日韩欧美久久| 日本午夜精品久久久久| 凹凸日日摸日日碰夜夜| 国产精品色一区二区三区| 日韩欧美黄色影院| 日韩欧美自拍| 成人av电影在线网| 99精品国产福利在线观看免费| 成人午夜sm精品久久久久久久| 精品成人影院| 无国产精品白浆免费视| 91高清视频免费看| 青青草原综合久久大伊人精品优势| 日韩视频在线一区| xxxxxhd亚洲人hd| 欧美一区国产一区| 国产曰肥老太婆无遮挡| 女同视频在线观看| 中文字幕超清在线免费观看| 欧美激情影院| 欧美r片在线| 国产精品无码午夜福利| 精品黄色免费中文电影在线播放| 激情欧美一区二区| 欧美老女人bb| 久久精品亚洲7777影院| 琪琪五月天综合婷婷| 日韩国产高清视频在线| 亚洲国产精品久久久久蝴蝶传媒| 亚洲永久精品ww.7491进入| 成人三级网址| 欧美日韩亚洲系列| 国产一级特黄aaa大片| 日韩av一二三四| 国产欧美最新羞羞视频在线观看| 欧美丰满艳妇bbwbbw| 欧美日韩天堂| 高清视频在线观看三级| 国产毛片欧美毛片久久久| 亚洲美女黄网| 欧美一区二区三区在线观看视频| 国产不卡在线观看| 久久夜色精品国产噜噜av| 国产chinese男男gaygay网站| 成人影院在线观看视频| 国产精品av一区二区| 色999日韩欧美国产| 欧美日本在线视频中文字字幕| 黑鬼狂亚洲人videos| 欧美日韩在线看| 电影天堂国产精品| 欧美精品久久久久久久免费| 日韩精品视频在线免费观看| 国产女王在线**视频| 韩国一区二区三区美女美女秀| 日韩一区二区三| 看**视频a级毛片| 亚洲欧美国产精品va在线观看| 日韩国产在线播放| 精品无码久久久久久久| 国产精品高潮呻吟久久久| 久久婷婷国产综合尤物精品| 久久在线免费| 337p日本欧洲亚洲大胆张筱雨| 中文字幕不卡的av| 在线观看一二三区| 狠狠综合久久av一区二区蜜桃| 国产精品欧美极品| 在线观看电影av|