国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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

2024-07-24 12:49:35
字體:
供稿:網(wǎng)友

前言

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

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

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

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

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

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

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

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

<?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打開文件:

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 华宁县| 洞口县| 仁怀市| 咸阳市| 宜都市| 连州市| 崇州市| 新泰市| 宜都市| 墨竹工卡县| 西乡县| 金川县| 罗江县| 昭觉县| 镇康县| 岳阳市| 略阳县| 邻水| 凤庆县| 思茅市| 玉林市| 定兴县| 潮州市| 余姚市| 江源县| 大连市| 太保市| 碌曲县| 惠来县| 墨玉县| 修水县| 温宿县| 河西区| 原阳县| 南木林县| 达日县| 康马县| 靖西县| 安图县| 辽阳县| 灵山县|