淺析MySQL的注入安全問題
如果把用戶輸入到一個(gè)網(wǎng)頁,將其插入到MySQL數(shù)據(jù)庫,有機(jī)會(huì)離開了發(fā)生安全問題被稱為SQL注入敞開。這一課將教如何幫助防止這種情況的發(fā)生,并幫助保護(hù)腳本和MySQL語句。
注入通常發(fā)生在處理一個(gè)用戶輸入,如他們的名字,而不是一個(gè)名字,他們給一個(gè)會(huì)在不知不覺中你的數(shù)據(jù)庫上運(yùn)行的MySQL語句。
永遠(yuǎn)不要信任用戶提供的數(shù)據(jù),只能驗(yàn)證后處理這些數(shù)據(jù),作為一項(xiàng)規(guī)則,這是通過模式匹配。在下面的例子中,用戶名被限制為字母數(shù)字字符加下劃線的長度在8到20個(gè)字符之間 - 根據(jù)需要修改這些規(guī)則。
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
$result = mysql_query("SELECT * FROM users
WHERE username=$matches[0]");
}
else
{
echo "username not accepted";
}
為了說明這個(gè)問題,認(rèn)為這是摘要:
// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");
函數(shù)調(diào)用應(yīng)該是從用戶表中的名稱列的名稱相匹配用戶指定的檢索記錄。在正常情況下,名稱只包含字母數(shù)字字符或空間,如字符串髂骨。但在這里,給$name通過附加一個(gè)全新的查詢,調(diào)用數(shù)據(jù)庫變成災(zāi)難:注入DELETE查詢刪除用戶的所有記錄。
幸運(yùn)的是,如果使用MySQL,在mysql_query()函數(shù)不會(huì)允許查詢堆疊,或在一個(gè)單一的函數(shù)調(diào)用執(zhí)行多個(gè)查詢。如果嘗試到堆放查詢則調(diào)用失敗。
其他PHP數(shù)據(jù)庫擴(kuò)展,如SQLite和PostgreSQL則愉快地進(jìn)行堆查詢,執(zhí)行在一個(gè)字符串中的所有的查詢,并創(chuàng)建一個(gè)嚴(yán)重的安全問題。
防止SQL注入:
可以處理所有的轉(zhuǎn)義字符巧妙的腳本語言,比如Perl和PHP。 PHP的MySQL擴(kuò)展提供的函數(shù)mysql_real_escape_string()輸入到MySQL的特殊字符進(jìn)行轉(zhuǎn)義。
if (get_magic_quotes_gpc())
{
$name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");
LIKE困境:
為了解決的LIKE問題,一個(gè)自定義的轉(zhuǎn)義機(jī)制必須用戶提供的%和_字符轉(zhuǎn)換成文字。使用addcslashes()函數(shù),讓可以指定一個(gè)字符范圍轉(zhuǎn)義。
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
相關(guān)文章
跳槽必備之你設(shè)計(jì)索引的原則是什么?怎么避免索引失效?
索引的設(shè)計(jì)可以遵循一些已有的原則,創(chuàng)建索引的時(shí)候請盡量符合這些原則,便于提升索引地使用效率,更高效地使用索引。今天給大家介紹跳槽必備之你設(shè)計(jì)索引的原則是什么?怎么避免索引失效?感興趣的朋友一起看看吧2021-05-05
Mysql?InnoDB?B+樹索引目錄項(xiàng)記錄頁管理
這篇文章主要為大家介紹了Mysql?InnoDB?B+樹索引目錄項(xiàng)記錄頁管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Windows下MySQL?8.0.29?安裝和刪除圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows下MySQL?8.0.29?安裝和刪除圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
MySQL中的用戶創(chuàng)建與權(quán)限管理
這篇文章主要介紹了MySQL中的用戶創(chuàng)建與權(quán)限管理,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

