在網站建設的過程中,隨著時間的積累,數據庫的數據量越來越大,可以說,一個網站最重要的部分就是數據,一旦數據泄漏,會對公司造成難以想像的影響,所以數據的安全行至關重要。任何一個網站都有一個后臺,方便對整個網站進行管理。后臺往往有一個登錄系統,這個登錄系統,就很有可能通過一些方法直接驗證通過從而進入你的后臺,導致我們網站數據泄漏。今天就給大家介紹一些方法,防止這種情況發生。具體操作如下:
首先我們來看產生結果的原因。
當一個變量從表單傳入到php,需要查詢mysql的話,需要進行處理。
舉例:
$unsafe_variable = $_POST@['user_input'];
mysqli_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')");
用戶可以輸入諸如 : value'); DROP TABLE table; ,SQL語句就變成這樣了:
INSERT INTO table (column) VALUES('value'); DROP TABLE table;')
執行的結果就是table表被刪掉了。
這是一種常見的sql注入方法,那么在程序中,應該怎樣預防呢?
方法一:mysql_real_escape_string()
由于addslashes()不檢測字符集,所以有寬字節注入風險,所以php中添加了這個函數。
這個函數本來是mysql的擴展,但是由于存在寬字節的問題,php基于mysql的擴展開發了此函數。
mysql_real_escape_chars()是mysql_escape_chars()的替代用法。
與addslashes()相比,不僅會將' " \ NOL(ascii的0)轉義,還會把\r \n進行轉義。同時會檢測數據編碼。
按php官方的描述,此函數可以安全的用于mysql。
方法二:預處理查詢 (Prepared Statements)
a. 先預發送一個sql模板過去
b. 再向mysql發送需要查詢的參數
就好像填空題一樣,不管參數怎么注入,mysql都能知道這是變量,不會做語義解析,起到防注入的效果,這是在mysql中完成的。
A.使用mysqli:prepare()實現
$mysqli = new mysqli("example.com", "user", "password", "database");
$stmt = $mysqli>prepare("SELECT id, label FROM test WHERE id = ?");
$stmt>bind_param(1, $city);
$stmt>execute();
$res = $stmt>get_result();
$row = $res>fetch_assoc();
B. 使用pdo實現
pdo是一個php官方推薦的數據庫抽象層,提供了很多實用的工具。
使用pdo的預處理參數化查詢可以有效防止sql注入。
使用方法跟上面差不多,區別在于pdo提供了更多樣的方法。使用這個pdo>$stmt對象進行查詢后,會被結果集覆蓋,類型是一個二維數組。
方法三:html輸出與防止xss注入
特殊字符輸出
比如' " < >有著特殊的意義,如果直接寫到html中輸出,會引起dom格式的錯亂,那么就需要用到特殊的輸出方法。
最后,希望可以幫到大家。
以上就是關于網站建設之mysql防止sql注入(成都網站建設),希望對你有幫助,更多內容關注創新互聯。
分享標題:網站建設之mysql防止sql注入(成都網站建設)
網站網址:http://m.newbst.com/news27/327177.html
成都網站建設公司_創新互聯,為您提供Google、全網營銷推廣、自適應網站、服務器托管、網站排名、網站策劃
廣告
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源:
創新互聯