婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用PDO防sql注入的原理分析

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

熱門標簽:電銷機器人針對的 外呼系統服務 高德地圖標注中心個人注冊 如何在高德地圖標注新地址 外呼系統防封號違法嗎 寶應電信400電話辦理費用 湘潭電銷機器人咨詢電話 高德地圖標注模式 400電話辦理都選易號網

前言

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

在php手冊中'PDO--預處理語句與存儲過程'下的說明:

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

下邊分別說明一下上述兩點好處:

1.首先說說mysql的存儲過程,mysql5中引入了存儲過程特性,存儲過程創建的時候,數據庫已經對其進行了一次解析和優化。其次,存儲過程一旦執行,在內存中就會保留一份這個存儲過程,這樣下次再執行同樣的存儲過程時,可以從內存中直接中讀取。mysql存儲過程的使用可以參看:https://www.jb51.net/article/7032.htm

對于PDO,原理和其相同,只是PDO支持EMULATE_PREPARES(模擬預處理)方式,是在本地由PDO驅動完成,同時也可以不使用本地的模擬預處理,交由mysql完成,下邊會對這兩種情況進行說明。

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

在虛擬機上執行一段代碼,對遠端mysql發起請求:

?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.dump

sz mysql.dump

通過wireshark打開文件:

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

查看Request Query包可以看到:

咦?這不也是拼接sql語句么?

其實,這與我們平時使用mysql_real_escape_string將字符串進行轉義,再拼接成SQL語句沒有差別,只是由PDO本地驅動完成轉義的(EMULATE_PREPARES)

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

針對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));

而正確的轉義應該是給mysql Server指定字符集,并將變量發送給MySQL Server完成根據字符轉義。

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

PDO有一項參數,名為PDO::ATTR_EMULATE_PREPARES ,表示是否使用PHP本地模擬prepare,此項參數默認true,我們改為false后再抓包看看。

先在代碼第一行后添加

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

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

php對sql語句發送采用了prepare--execute方式

 

這次的變量轉義處理交由mysql server來執行。

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

使用PDO的注意事項

1.  php升級到5.3.6+,生產環境強烈建議升級到php 5.3.9+ php 5.4+,php 5.3.8存在致命的hash碰撞漏洞。

2. 若使用php 5.3.6+, 請在在PDO的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及以前版本,設置PDO::ATTR_EMULATE_PREPARES參數為false(即由MySQL server進行變量處理),php 5.3.6以上版本已經處理了這個問題,無論是使用本地模擬prepare還是調用mysql server的prepare均可。

4. 如果使用了PHP 5.3.6及以前版本, 因Yii框架默認并未設置ATTR_EMULATE_PREPARES的值,請在數據庫配置文件中指定emulatePrepare的值為false。 

注:

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

其實set names charset>有兩個作用:

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

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

也就是說,如果數據表使用gbk字符集,而PHP程序使用UTF-8編碼,我們在執行查詢前運行set names utf8, 告訴mysql server正確編碼即可,無須在程序中編碼轉換。這樣我們以utf-8編碼提交查詢到mysql server, 得到的結果也會是utf-8編碼。省卻了程序中的轉換編碼問題,不要有疑問,這樣做不會產生亂碼。

那么在DSN中指定charset的作用是什么? 只是告訴PDO, 本地驅動轉義時使用指定的字符集(并不是設定mysql server通信字符集),設置mysql server通信字符集,還得使用set names charset>指令。

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • Php中用PDO查詢Mysql來避免SQL注入風險的方法
  • php中mysql連接方式PDO使用詳解
  • php使用pdo連接并查詢sql數據庫的方法
  • PHP實現PDO的mysql數據庫操作類
  • pdo中使用參數化查詢sql
  • php基于PDO實現功能強大的MYSQL封裝類實例
  • php使用PDO執行SQL語句的方法分析

標簽:馬鞍山 黔南 蘭州 黃山 宿遷 南充 佛山 賀州

巨人網絡通訊聲明:本文標題《使用PDO防sql注入的原理分析》,本文關鍵詞  使用,PDO,防,sql,注入,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用PDO防sql注入的原理分析》相關的同類信息!
  • 本頁收集關于使用PDO防sql注入的原理分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲一区二区三区中文字幕| 亚洲五码中文字幕| 国产精品亲子伦对白| 国产日韩精品一区二区浪潮av | 欧美在线999| 国产欧美精品在线观看| 久久精品99久久久| 欧美中文字幕不卡| 国产精品日韩成人| 国产高清在线精品| 久久嫩草精品久久久久| 日韩黄色免费电影| 日韩色在线观看| 日本不卡一二三区黄网| 日韩一区二区中文字幕| 亚洲三级视频在线观看| 国产91精品一区二区麻豆亚洲| 欧美r级在线观看| 国产精品资源站在线| 精品国产乱码久久久久久老虎| 午夜久久久久久久久久一区二区| 欧洲精品在线观看| 久久99热狠狠色一区二区| 欧美sm美女调教| 国产91在线观看丝袜| 中文字幕国产精品一区二区| 成人丝袜视频网| 日韩专区中文字幕一区二区| 欧美成人欧美edvon| 国产91精品免费| 国产日韩精品视频一区| 欧美伊人久久大香线蕉综合69| 日韩极品在线观看| 一区二区三区高清在线| 中文字幕欧美日本乱码一线二线| 一本久久精品一区二区| 精品写真视频在线观看| 夜夜精品视频一区二区| 国产日韩在线不卡| 宅男在线国产精品| 在线观看亚洲成人| 成人午夜激情影院| 国模冰冰炮一区二区| 亚洲色图欧美偷拍| 久久久久久日产精品| 另类小说一区二区三区| 亚洲午夜免费电影| 一区二区三区毛片| 亚洲一区二区欧美日韩| 亚洲精品国产第一综合99久久| 国产精品乱码妇女bbbb| 国产精品福利影院| 国产精品成人免费精品自在线观看 | 国产成人高清在线| 蜜臀国产一区二区三区在线播放| 亚洲国产美女搞黄色| 偷拍亚洲欧洲综合| 麻豆精品一二三| 免费观看91视频大全| 一区二区三区精品| 蜜臀99久久精品久久久久久软件| 美女视频黄 久久| 国产99久久久国产精品潘金网站| 色婷婷综合久久久| 日韩欧美国产一区二区在线播放 | 99久久精品国产导航| 91蝌蚪porny九色| 欧美精品一区二区蜜臀亚洲| 1024国产精品| 国产99精品视频| 欧美日韩久久久| 国产清纯美女被跳蛋高潮一区二区久久w| 欧美色综合网站| 欧美激情综合在线| 日韩不卡一二三区| 欧洲生活片亚洲生活在线观看| 69久久99精品久久久久婷婷 | 国产一区二区伦理片| 国产日韩欧美一区二区三区乱码 | 日韩欧美亚洲国产另类| 欧美国产国产综合| 中文字幕中文字幕在线一区 | 一区二区三区欧美久久| 日韩在线观看一区二区| 97精品久久久久中文字幕| 欧美日本乱大交xxxxx| 亚洲欧美激情在线| 成人av集中营| 国产成人精品www牛牛影视| 日日夜夜精品视频免费| 色呦呦国产精品| 亚洲成a人片综合在线| 99re8在线精品视频免费播放| 精品国产乱码久久久久久老虎| 有坂深雪av一区二区精品| 成人一区二区三区视频 | 成人午夜电影网站| 久久久www免费人成精品| 精品综合久久久久久8888| 日韩亚洲电影在线| 蜜桃精品视频在线| 91亚洲精品久久久蜜桃网站 | 亚洲国产视频在线| 91麻豆精品91久久久久同性| 久久99国产精品久久99果冻传媒| 亚洲成人动漫精品| 自拍偷拍亚洲综合| 欧美午夜精品免费| 亚洲色图制服诱惑| 久久精品视频一区二区三区| 欧美疯狂性受xxxxx喷水图片| 亚洲人亚洲人成电影网站色| 激情综合五月天| 亚洲高清久久久| 午夜亚洲福利老司机| 欧美一区二区三区成人| 成人动漫中文字幕| 国产精品一区二区x88av| 日日夜夜一区二区| 亚洲精品综合在线| 国产精品女主播在线观看| 欧美午夜免费电影| 欧美在线短视频| 欧美少妇xxx| 色国产精品一区在线观看| 午夜av电影一区| 免费成人在线网站| 国产成人日日夜夜| 波多野结衣亚洲| 国产精品无遮挡| 久久久久久久久岛国免费| 国产欧美一区二区三区在线看蜜臀 | 成人一二三区视频| 欧洲精品中文字幕| 精品国产乱码久久久久久久| 久久九九国产精品| 国产精品久久久久影视| 一区二区在线电影| 麻豆国产欧美日韩综合精品二区| 白白色亚洲国产精品| 男女男精品网站| 精品亚洲成a人| 日本道在线观看一区二区| 欧美xxxx在线观看| 国产精品久久久久久久浪潮网站| 亚洲图片欧美综合| 97se狠狠狠综合亚洲狠狠| 6080亚洲精品一区二区| 中文字幕一区二区三区在线不卡| 日韩一区欧美二区| 色综合天天综合给合国产| 2022国产精品视频| 捆绑调教一区二区三区| 欧美中文字幕一区| 亚洲欧美日韩系列| 成人黄色av网站在线| 中文字幕成人av| 国产一区二区在线免费观看| 国产亚洲一二三区| 日韩欧美国产成人一区二区| 亚洲视频一区在线| 成人激情小说乱人伦| 国产精品久久久久7777按摩| 国产高清久久久| 中文一区在线播放| 91视频在线观看免费| 五月激情六月综合| 久久伊人中文字幕| 成人丝袜18视频在线观看| 国产精品拍天天在线| 91传媒视频在线播放| 久久国产尿小便嘘嘘尿| 中文字幕在线观看一区二区| 在线观看欧美黄色| 麻豆中文一区二区| 欧美国产一区在线| 欧美一区二区视频在线观看2020| 国产精品亚洲第一| 天天综合色天天| 欧美高清激情brazzers| 精品一区二区成人精品| 亚洲精品国产无天堂网2021| 久久色.com| 欧美一区二区在线不卡| 97久久人人超碰| 国产乱人伦偷精品视频免下载| 亚洲精品欧美激情| 国产精品毛片a∨一区二区三区| 欧美精品在欧美一区二区少妇| 国产99久久久久| 狠狠狠色丁香婷婷综合激情| 亚洲最新视频在线播放| 国产亚洲污的网站| 久久久久久久网| 国产日韩一级二级三级| 久久综合久久久久88| 国产婷婷色一区二区三区| 日韩欧美国产成人一区二区| 欧美日韩免费观看一区二区三区 | 制服丝袜av成人在线看|