欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP代碼網(wǎng)站如何防范SQL注入漏洞攻擊建議分享

 更新時間:2012年03月01日 21:50:36   作者:  
所有的網(wǎng)站管理員都會關(guān)心網(wǎng)站的安全問題。說到安全就不得不說到SQL注入攻擊(SQL Injection)
黑客通過SQL注入攻擊可以拿到網(wǎng)站數(shù)據(jù)庫的訪問權(quán)限,之后他們就可以拿到網(wǎng)站數(shù)據(jù)庫中所有的數(shù)據(jù),惡意的黑客可以通過SQL注入功能篡改數(shù)據(jù)庫中的數(shù)據(jù)甚至?xí)褦?shù)據(jù)庫中的數(shù)據(jù)毀壞掉。做為網(wǎng)絡(luò)開發(fā)者的你對這種黑客行為恨之入骨,當(dāng)然也有必要了解一下SQL注入這種功能方式的原理并學(xué)會如何通過代碼來保護(hù)自己的網(wǎng)站數(shù)據(jù)庫。今天就通過PHP和MySQL數(shù)據(jù)庫為例,分享一下我所了解的SQL注入攻擊和一些簡單的防范措施和一些如何避免SQL注入攻擊的建議。
什么是SQL注入(SQL Injection)?
簡單來說,SQL注入是使用代碼漏洞來獲取網(wǎng)站或應(yīng)用程序后臺的SQL數(shù)據(jù)庫中的數(shù)據(jù),進(jìn)而可以取得數(shù)據(jù)庫的訪問權(quán)限。比如,黑客可以利用網(wǎng)站代碼的漏洞,使用SQL注入的方式取得一個公司網(wǎng)站后臺數(shù)據(jù)庫里所有的數(shù)據(jù)信息。拿到數(shù)據(jù)庫管理員登錄用戶名和密碼后黑客可以自由修改數(shù)據(jù)庫中的內(nèi)容甚至刪除該數(shù)據(jù)庫。SQL注入也可以用來檢驗(yàn)一個網(wǎng)站或應(yīng)用的安全性。SQL注入的方式有很多種,但本文將只討論最基本的原理,我們將以PHP和MySQL為例。本文的例子很簡單,如果你使用其它語言理解起來也不會有難度,重點(diǎn)關(guān)注SQL命令即可。
一個簡單的SQL注入攻擊案例
假如我們有一個公司網(wǎng)站,在網(wǎng)站的后臺數(shù)據(jù)庫中保存了所有的客戶數(shù)據(jù)等重要信息。假如網(wǎng)站登錄頁面的代碼中有這樣一條命令來讀取用戶信息。
復(fù)制代碼 代碼如下:

<?
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .$_GET['username']. " ' AND `password`= ' " .$_GET['password']. " ' ";
?>

現(xiàn)在有一個黑客想攻擊你的數(shù)據(jù)庫,他會嘗試在此登錄頁面的用戶名的輸入框中輸入以下代碼:
' ; SHOW TABLES;
點(diǎn)擊登陸鍵,這個頁面就會顯示出數(shù)據(jù)庫中的所有表。如果他現(xiàn)在使用下面這行命令:
'; DROP TABLE [table name];
這樣他就把一張表刪除了!
當(dāng)然,這只是一個很簡單的例子,實(shí)際的SQL注入方法比這個要復(fù)雜得多,黑客也愿意花大量的時間來不斷嘗試來攻擊你的代碼。有一些程序軟件也可以自動地來不斷嘗試SQL注入攻擊。了解了SQL注入的攻擊原理后,我們來看一下如何防范SQL注入攻擊。
防范SQL注入 - 使用mysql_real_escape_string()函數(shù)
在數(shù)據(jù)庫操作的代碼中用這個函數(shù)mysql_real_escape_string()可以將代碼中特殊字符過濾掉,如引號等。如下例:
復(fù)制代碼 代碼如下:

<?
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ";
?>

防范SQL注入 - 使用mysql_query()函數(shù)
mysql_query()的特別是它將只執(zhí)行SQL代碼的第一條,而后面的并不會執(zhí)行?;叵朐谧钋懊娴睦又校诳屯ㄟ^代碼來例后臺執(zhí)行了多條SQL命令,顯示出了所有表的名稱。所以mysql_query()函數(shù)可以取到進(jìn)一步保護(hù)的作用。我們進(jìn)一步演化剛才的代碼就得到了下面的代碼:
復(fù)制代碼 代碼如下:

<?
//connection
$database = mysql_connect("localhost", "username","password");
//db selection
mysql_select_db("database", $database);
$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ", $database);
?>

除此之外,我們還可以在PHP代碼中判斷輸入值的長度,或者專門用一個函數(shù)來檢查輸入的值。所以在接受用戶輸入值的地方一定要做好輸入內(nèi)容的過濾和檢查。當(dāng)然學(xué)習(xí)和了解最新的SQL注入方式也非常重要,這樣才能做到有目的的防范。如果使用的是平臺式的網(wǎng)站系統(tǒng)如Wordpress,要注意及時打上官方的補(bǔ)丁或升級到新的版本。如果有講得不對的地方或不理解的請在評論區(qū)留言。

相關(guān)文章

  • php 使用ActiveMQ發(fā)送消息,與處理消息操作示例

    php 使用ActiveMQ發(fā)送消息,與處理消息操作示例

    這篇文章主要介紹了php 使用ActiveMQ發(fā)送消息,與處理消息操作,結(jié)合實(shí)例形式分析了php使用ActiveMQ實(shí)現(xiàn)消息的發(fā)送與接收處理相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • PHP sprintf()函數(shù)用例解析

    PHP sprintf()函數(shù)用例解析

    sprintf() 函數(shù)把格式化的字符串寫寫入一個變量中。
    2011-05-05
  • php 無法載入mysql擴(kuò)展

    php 無法載入mysql擴(kuò)展

    無法載入 mysql 擴(kuò)展的實(shí)現(xiàn)代碼。
    2010-03-03
  • php 批量添加多行文本框textarea一行一個

    php 批量添加多行文本框textarea一行一個

    這篇文章主要介紹了用php批量添加多行文本框textarea,一行一個,需要的朋友可以參考下
    2014-06-06
  • php+ajax無刷新上傳圖片實(shí)例代碼

    php+ajax無刷新上傳圖片實(shí)例代碼

    這篇文章為大家分享了php+ajax無刷新上傳圖片實(shí)例代碼,需要的朋友可以參考下
    2015-11-11
  • 從0構(gòu)建Oauth2Server服務(wù)?之Token?編解碼

    從0構(gòu)建Oauth2Server服務(wù)?之Token?編解碼

    這篇文章主要為大家介紹了從0構(gòu)建Oauth2Server服務(wù)之Token編解碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • PHP生成條形碼大揭秘

    PHP生成條形碼大揭秘

    前陣子在接觸到一個商家優(yōu)惠券的功能,需要用到條形碼,于是將資料重新整理下,需要的朋友可以參考下
    2015-09-09
  • php中請求url的五種方法總結(jié)

    php中請求url的五種方法總結(jié)

    最近開發(fā)中遇到一個問題,程序第4行會請求一個url,通過查找相關(guān)的資料發(fā)現(xiàn)有多種方法,本文給大家介紹了關(guān)于php中請求url的五種方法,分別是用fopen()函數(shù)、file()函數(shù)、file_get_contents()函數(shù)、curl() 請求遠(yuǎn)程url數(shù)據(jù)和exec() 執(zhí)行命令行命令,下面來一起看看吧。
    2017-07-07
  • php命令行用法入門實(shí)例教程

    php命令行用法入門實(shí)例教程

    這篇文章主要介紹了php命令行用法入門,以實(shí)例的形式分析了在命令行中運(yùn)行php程序的方法,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-10-10
  • 詳解PHP反序列化漏洞示例與原理

    詳解PHP反序列化漏洞示例與原理

    PHP反序列化漏洞也叫PHP對象注入,是一個非常常見的漏洞,這種類型的漏洞雖然有些難以利用,但一旦利用成功就會造成非常危險的后果。本文將詳細(xì)講講PHP反序列化漏洞的原理及示例,感興趣的可以了解一下
    2022-09-09

最新評論