< p >今天我們要說的是mysql注入php的問題。在現在很多的web應用中,數據都是采用mysql數據庫進行存儲的,所以mysql注入這個問題就顯得尤為重要。mysql注入是一種非常常見的攻擊方式,攻擊者可以通過一定的手段,修改數據庫中的數據,獲得敏感信息,甚至遠程控制目標服務器。接下來我們通過一些例子來講解一下mysql注入的原理和實現方法。< /p >< p >舉例一:比如一家服裝網站的查詢條件是用戶輸入的關鍵字,傳到后臺,后臺再執行查詢操作,那么如果后臺代碼沒有進行足夠的校驗,攻擊者可以通過在關鍵字中輸入惡意的代碼,成功將數據庫中的數據篡改或者泄露。< /p >< pre >$search_key = $_GET[‘search_key‘];
$sql = "select * from products where name like '%".$search_key."%'";< /pre >< p >這段代碼雖然可以正確的實現搜索功能,但是其中隱藏著很大的漏洞。如果攻擊者在search_key關鍵字處注入了如下代碼,將會對數據庫造成很大的威脅:< /p >< pre >‘ or 1=1;#< /pre >< p >攻擊者在頁面輸入框中輸入這段代碼,可以將整個數據庫中的數據都查詢出來,十分危險。注入的代碼中,其中or 1=1表示永遠為真,#是注釋符,注釋掉了之后的代碼。< p >舉例二:再比如下面這個登錄頁面,如果程序員沒有對用戶輸入的用戶名和密碼進行處理,攻擊者也可以輕松地進行注入攻擊,比如使用or 1=1這樣的注入語句即可盜取賬號和密碼。< /p >< pre >$username = $_POST[‘username‘];
$password = $_POST[‘password‘];
$sql = "select * from user where username='$username' and password='$password'";< /pre >< p >而且,如果利用了sql注入漏洞,攻擊者可以在此基礎上進行一些進一步的攻擊,比如把網站掛馬嵌入一些違禁詞、從數據庫拿到管理員的賬號密碼實現進一步的黑客攻擊,這樣的后果很難承擔。< /p >< p >然而,避免sql注入的方法也是十分簡單的。首先將代碼的注入點作為字符串進行處理,利用mysql_escape_string()方法進行處理即可實現代碼注入攔截。下面是一個處理示例:< /p >< pre >$search_key = $_GET[‘search_key‘];
$search_key = mysql_escape_string($search_key);
$sql = "select * from products where name like '%".$search_key."%'";< /pre >< p >當用戶輸入了or 1=1之類的語句時,直接無法進行注入,因為注入的內容會被處理掉不產生任何影響。< /p >< p >總之,在開發網站的時候,注入漏洞必須要盡可能的避免,并且將一些應用中敏感的數據庫信息做好安全措施,瞬間會讓你的網站更加的安全可靠。< /p >
上一篇mysql操作php