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

首頁 > 數據庫 > MySQL > 正文

淺析MySQL的注入安全問題

2020-01-18 22:53:27
字體:
來源:轉載
供稿:網友

如果把用戶輸入到一個網頁,將其插入到MySQL數據庫,有機會離開了發生安全問題被稱為SQL注入敞開。這一課將教如何幫助防止這種情況的發生,并幫助保護腳本和MySQL語句。

注入通常發生在處理一個用戶輸入,如他們的名字,而不是一個名字,他們給一個會在不知不覺中你的數據庫上運行的MySQL語句。

永遠不要信任用戶提供的數據,只能驗證后處理這些數據,作為一項規則,這是通過模式匹配。在下面的例子中,用戶名被限制為字母數字字符加下劃線的長度在8到20個字符之間 - 根據需要修改這些規則。

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

為了說明這個問題,認為這是摘要:

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

函數調用應該是從用戶表中的名稱列的名稱相匹配用戶指定的檢索記錄。在正常情況下,名稱只包含字母數字字符或空間,如字符串髂骨。但在這里,給$name通過附加一個全新的查詢,調用數據庫變成災難:注入DELETE查詢刪除用戶的所有記錄。

幸運的是,如果使用MySQL,在mysql_query()函數不會允許查詢堆疊,或在一個單一的函數調用執行多個查詢。如果嘗試到堆放查詢則調用失敗。

其他PHP數據庫擴展,如SQLite和PostgreSQL則愉快地進行堆查詢,執行在一個字符串中的所有的查詢,并創建一個嚴重的安全問題。
防止SQL注入:

可以處理所有的轉義字符巧妙的腳本語言,比如Perl和PHP。 PHP的MySQL擴展提供的函數mysql_real_escape_string()輸入到MySQL的特殊字符進行轉義。

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

LIKE困境:

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 个旧市| 手机| 达拉特旗| 台东市| 绍兴县| 东丽区| 南岸区| 治县。| 孟州市| 泸定县| 泽库县| 霍山县| 乳山市| 泗阳县| 固镇县| 磐石市| 香港 | 荆门市| 肥乡县| 平定县| 哈巴河县| 金昌市| 炎陵县| 怀安县| 富源县| 邵东县| 连州市| 明星| 昭通市| 青龙| 改则县| 顺义区| 新民市| 芜湖市| 城固县| 濮阳市| 沙坪坝区| 梁河县| 旬邑县| 泰和县| 红安县|