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

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

淺析MySQL的注入安全問(wèn)題

2024-07-24 13:07:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了淺析MySQL的注入安全問(wèn)題,文中簡(jiǎn)單說(shuō)道了如何避免SQL注入敞開(kāi)問(wèn)題的方法,需要的朋友可以參考下

如果把用戶輸入到一個(gè)網(wǎng)頁(yè),將其插入到MySQL數(shù)據(jù)庫(kù),有機(jī)會(huì)離開(kāi)了發(fā)生安全問(wèn)題被稱(chēng)為SQL注入敞開(kāi)。這一課將教如何幫助防止這種情況的發(fā)生,并幫助保護(hù)腳本和MySQL語(yǔ)句。

注入通常發(fā)生在處理一個(gè)用戶輸入,如他們的名字,而不是一個(gè)名字,他們給一個(gè)會(huì)在不知不覺(jué)中你的數(shù)據(jù)庫(kù)上運(yùn)行的MySQL語(yǔ)句。

永遠(yuǎn)不要信任用戶提供的數(shù)據(jù),只能驗(yàn)證后處理這些數(shù)據(jù),作為一項(xiàng)規(guī)則,這是通過(guò)模式匹配。在下面的例子中,用戶名被限制為字母數(shù)字字符加下劃線的長(zhǎng)度在8到20個(gè)字符之間 - 根據(jù)需要修改這些規(guī)則。

 

 
  1. if (preg_match("/^/w{8,20}$/", $_GET['username'], $matches)) 
  2. $result = mysql_query("SELECT * FROM users  
  3. WHERE username=$matches[0]"); 
  4. else 
  5. echo "username not accepted"

為了說(shuō)明這個(gè)問(wèn)題,認(rèn)為這是摘要:

 

 
  1. // supposed input 
  2. $name = "Qadir'; DELETE FROM users;"
  3. mysql_query("SELECT * FROM users WHERE name='{$name}'"); 

函數(shù)調(diào)用應(yīng)該是從用戶表中的名稱(chēng)列的名稱(chēng)相匹配用戶指定的檢索記錄。在正常情況下,名稱(chēng)只包含字母數(shù)字字符或空間,如字符串髂骨。但在這里,給$name通過(guò)附加一個(gè)全新的查詢,調(diào)用數(shù)據(jù)庫(kù)變成災(zāi)難:注入DELETE查詢刪除用戶的所有記錄。

幸運(yùn)的是,如果使用MySQL,在mysql_query()函數(shù)不會(huì)允許查詢堆疊,或在一個(gè)單一的函數(shù)調(diào)用執(zhí)行多個(gè)查詢。如果嘗試到堆放查詢則調(diào)用失敗。

其他PHP數(shù)據(jù)庫(kù)擴(kuò)展,如SQLite和PostgreSQL則愉快地進(jìn)行堆查詢,執(zhí)行在一個(gè)字符串中的所有的查詢,并創(chuàng)建一個(gè)嚴(yán)重的安全問(wèn)題。

防止SQL注入:

可以處理所有的轉(zhuǎn)義字符巧妙的腳本語(yǔ)言,比如Perl和PHP。 PHP的MySQL擴(kuò)展提供的函數(shù)mysql_real_escape_string()輸入到MySQL的特殊字符進(jìn)行轉(zhuǎn)義。

 

 
  1. if (get_magic_quotes_gpc())  
  2. $name = stripslashes($name); 
  3. $name = mysql_real_escape_string($name); 
  4. mysql_query("SELECT * FROM users WHERE name='{$name}'"); 

LIKE困境:

為了解決的LIKE問(wèn)題,一個(gè)自定義的轉(zhuǎn)義機(jī)制必須用戶提供的%和_字符轉(zhuǎn)換成文字。使用addcslashes()函數(shù),讓可以指定一個(gè)字符范圍轉(zhuǎn)義。

 

 
  1. $sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); 
  2. // $sub == /%something/_ 
  3. mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'"); 
 

 

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 博乐市| 福州市| 永昌县| 巴彦淖尔市| 临澧县| 长垣县| 韩城市| 衡阳市| 锡林郭勒盟| 普定县| 北京市| 孟津县| 竹山县| 金川县| 兴业县| 昭觉县| 连南| 呼图壁县| 方正县| 呼和浩特市| 宁明县| 西盟| 柞水县| 太康县| 马公市| 宽城| 建湖县| 时尚| 商城县| 纳雍县| 哈尔滨市| 巴塘县| 沾益县| 米脂县| 盘山县| 论坛| 枝江市| 平安县| 唐河县| 疏附县| 鲁山县|