《MYSQL數(shù)據(jù)庫淺析MySQL的注入安全問題》要點:
本文介紹了MYSQL數(shù)據(jù)庫淺析MySQL的注入安全問題,希望對您有用。如果有疑問,可以聯(lián)系我們。
如果把用戶輸入到一個網(wǎng)頁,將其插入到MySQL數(shù)據(jù)庫,有機會離開了發(fā)生安全問題被稱為SQL注入敞開.這一課將教如何幫助防止這種情況的發(fā)生,并幫助保護(hù)腳本和MySQL語句.MYSQL入門
注入通常發(fā)生在處理一個用戶輸入,如他們的名字,而不是一個名字,他們給一個會在不知不覺中你的數(shù)據(jù)庫上運行的MySQL語句.MYSQL入門
永遠(yuǎn)不要信任用戶提供的數(shù)據(jù),只能驗證后處理這些數(shù)據(jù),作為一項規(guī)則,這是通過模式匹配.在下面的例子中,用戶名被限制為字母數(shù)字字符加下劃線的長度在8到20個字符之間 - 根據(jù)需要修改這些規(guī)則.MYSQL入門
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username not accepted"; }
為了說明這個問題,認(rèn)為這是摘要:MYSQL入門
// supposed input $name = "Qadir'; DELETE FROM users;"; mysql_query("SELECT * FROM users WHERE name='{$name}'");
函數(shù)調(diào)用應(yīng)該是從用戶表中的名稱列的名稱相匹配用戶指定的檢索記錄.在正常情況下,名稱只包含字母數(shù)字字符或空間,如字符串髂骨.但在這里,給$name通過附加一個全新的查詢,調(diào)用數(shù)據(jù)庫變成災(zāi)難:注入DELETE查詢刪除用戶的所有記錄.MYSQL入門
幸運的是,如果使用MySQL,在mysql_query()函數(shù)不會允許查詢堆疊,或在一個單一的函數(shù)調(diào)用執(zhí)行多個查詢.如果嘗試到堆放查詢則調(diào)用失敗.MYSQL入門
其他PHP數(shù)據(jù)庫擴展,如SQLite和PostgreSQL則愉快地進(jìn)行堆查詢,執(zhí)行在一個字符串中的所有的查詢,并創(chuàng)建一個嚴(yán)重的安全問題.
防止SQL注入:MYSQL入門
可以處理所有的轉(zhuǎn)義字符巧妙的腳本語言,比如Perl和PHP. PHP的MySQL擴展提供的函數(shù)mysql_real_escape_string()輸入到MySQL的特殊字符進(jìn)行轉(zhuǎn)義.MYSQL入門
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name='{$name}'");
LIKE困境:MYSQL入門
為了解決的LIKE問題,一個自定義的轉(zhuǎn)義機制必須用戶提供的%和_字符轉(zhuǎn)換成文字.使用addcslashes()函數(shù),讓可以指定一個字符范圍轉(zhuǎn)義.MYSQL入門
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); // $sub == \%something\_ mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
維易PHP培訓(xùn)學(xué)院每天發(fā)布《MYSQL數(shù)據(jù)庫淺析MySQL的注入安全問題》等實戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/13301.html