sql注入測試經(jīng)驗(yàn)教程_MySQL教程
推薦:mysql開啟遠(yuǎn)程登錄功能有時(shí)候建站的時(shí)候因?yàn)閿?shù)據(jù)庫和網(wǎng)站放在不同的IP,這個(gè)時(shí)候就需要用程序進(jìn)行mysql的遠(yuǎn)程連接,而mysql因?yàn)榘踩囊蛩兀J(rèn)的時(shí)候用戶設(shè)置的是不能遠(yuǎn)程連接,只能本地連接,這個(gè)時(shí)候就需要自己去修改其中的設(shè)置。下面講方法。 進(jìn)入cmd命令模式。 mysql -h localhost-u m
登錄注入
先看一個(gè)我們一般用的登錄頁面sql語句(原生態(tài)php執(zhí)行的sql)
$sql = "select * from users where username = '$username' and password = '$password'";
對于這種sql,對應(yīng)一個(gè)萬能密碼和用戶名:
萬能密碼: xx' or 1='1
萬能用戶名: xx' union select * from users/*
執(zhí)行時(shí)mysql解釋為:
$sql = select * from users where username = '$username' and password = ' xx' or 1='1'
不解釋,瞬間破解
同樣,上面是在sql語句中查詢字段后的輸入值加了單引號,有些時(shí)候尤其是初級程序員經(jīng)常對變量不加單引號:
$sql = "select * from users where username = $username and password = $password";
這時(shí)mysql解釋會被當(dāng)做數(shù)字型字段來匹配
萬能密碼: 11 union select * from users/*
執(zhí)行語句:
select * from users where username =11union select * from users/* and password = 54
查詢注入
這個(gè)比較好理解,一般在頁面的搜索框點(diǎn)擊按鈕搜索時(shí)在后臺sql中可能會用like來查詢,但如果沒有加任何處理,可能輸入一個(gè)% 或 __ 就會注入到sql中查詢?nèi)炕虿糠钟涗�,不過在php中可以使用一個(gè)函數(shù)來處理一下:
$keyword = addslashes($keyword);$keword = str_replace("%","$",$kwyword);
插入注入
我們先模擬一個(gè)網(wǎng)站注冊頁面的sql處理語句:
insert into users(username,password,grade) values('frank','123456','1');
假如users表中g(shù)rade為等級字段,并且默認(rèn)字段為1,注冊時(shí)用戶輸入用戶名和密碼兩個(gè)字段后,后臺插入語句為上面語句,則當(dāng)用戶輸入的密碼為 123456','3')/*時(shí),執(zhí)行sql為:
insert into users(username,password,grade) values('frank','123456','3')/*,'1';
這樣也可以達(dá)到注入的目的
解決sql注入:
�、�. 在服務(wù)器設(shè)置將php.ini配置文件中magic_quotes_gpc設(shè)置為On
服務(wù)器會自動(dòng)將單引號轉(zhuǎn)義為:'
不過攻擊時(shí)可以將單引號寫為char(13)-單引號ASCII碼,也一樣可以攻擊
�、�. 密碼比對
通過輸入的用戶名獲取密碼,再對密碼進(jìn)行匹配
$sql = "select * from users where username ='frank'"
$result = mysql_query($sql,$conn);
$row = mysql_fetch_array($result);
if($row['password'] != $password) ...
�、�. 使用pdo的PDO::prepare()預(yù)處理操作
PDO(PHP Data Object)擴(kuò)展在PHP5中加入,PHP6默認(rèn)識別PDO連接數(shù)據(jù)庫,pdo相當(dāng)于是一個(gè)數(shù)據(jù)庫抽象層,不同數(shù)據(jù)庫使用相同的方法名,解決數(shù)據(jù)庫連接不同意問題。
工作原理如下:

(使用時(shí)需先在php.ini中開啟對pdo擴(kuò)展的支持)
$sql = "select * from users where username=? and password=?"; //創(chuàng)建一個(gè)pdo對象 $mypdo = new PDO("mysql:host=localhost;port=3306;dbname=xx","root","123456"); //設(shè)置編碼 $mypdo->exec("set names utf8"); //預(yù)處理$sql $pdostatement = $mypdo->prepare(%sql); //將用戶名和密碼填入sql $pdostatement->execute(array($username,$password)); //得到查詢結(jié)果 $result = $pdostatement->fetch(); if(empty($result)) ...
�、�. 其他企業(yè)級解決sql注入方式:IDS(入侵檢測系統(tǒng))

關(guān)于sql注入對于開發(fā)工程師來說主要是防守,提高編寫安全代碼的意識,讓我們編寫的代碼質(zhì)量更高,安全性方面更好。
分享:不需手動(dòng)鎖表同步mysql數(shù)據(jù)庫確保系統(tǒng)安裝有perl-DBD-mysql Yum install perl-DBD-mysql 安裝xtrabackup Xtrabackup 2.1以后的版本不支持innodb引擎,因此需要下載2.0.*的版本。 Wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.7/RPM/rhel5/x86_64/percona-xtrabackup-2.0.7-55
- mysql開啟遠(yuǎn)程登錄功能
- 不需手動(dòng)鎖表同步mysql數(shù)據(jù)庫
- MySQL五個(gè)查詢優(yōu)化方法
- access與sql語法上有哪些區(qū)別
- 總結(jié)mysql服務(wù)器查詢慢原因
- go語言怎么和mysql數(shù)據(jù)庫進(jìn)行鏈接
- mysql給用戶添加查詢權(quán)限
- SQL中l(wèi)eftjoin和innerjoin配合使用
- SQL 2000怎么向SQL 2008 R2推送數(shù)據(jù)?
- MySQL導(dǎo)入導(dǎo)出數(shù)據(jù)出現(xiàn)亂碼的解決辦法
- sql語句中刪除表數(shù)據(jù)drop、truncate和delete的用法
- 安裝sql server 2008 報(bào)錯(cuò)等問題怎么解決
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- Mysql中的find_in_set的使用方法介紹
- mysql基本操作
- mysql錯(cuò)誤及解決全攻略
- 網(wǎng)站模板:以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句
- DBA應(yīng)該知道的一些關(guān)于SQL Server跟蹤標(biāo)記的使用
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- 關(guān)于Mysql查詢帶單引號及插入帶單引號字符串問題
- mysql的binlog太大太多占用大量磁盤的解決
- MySQL多表之間字段的匹配實(shí)現(xiàn)代碼
- 用MyEclipse配置DataBase Explorer(圖示)
猜你也喜歡看這些
- 如何在SAN上創(chuàng)建SQL Server群集
- 怎樣從數(shù)據(jù)行入手保護(hù)SQL Server數(shù)據(jù)安全
- 談SQL Server應(yīng)用程序的高級Sql注入
- sql to sqlalchemy 轉(zhuǎn)換的小例子
- SQLServer 2008中的代碼安全(四) 主密鑰
- SQL Server 2005中的CLR集成
- 基于存儲過程的詳細(xì)介紹
- 解讀SQL Server數(shù)據(jù)庫開發(fā)要注意的21點(diǎn)
- 怎樣減少SQL Server死鎖發(fā)生的情況
- 解析Asp.net編程中的數(shù)組基礎(chǔ)實(shí)例學(xué)習(xí)
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-sql注入測試經(jīng)驗(yàn)教程
。