php如何防範sql注入攻擊,php如何防止sql注入

2022-02-20 02:37:38 字數 4122 閱讀 6162

1樓:飛揚舞俠

資料進行轉義,

資料型別要轉換判斷,如id,要強制轉換為整形。

mysql語句中 值要加上單引號

$username=addslashes($_get['username']);

$id=intval($_get['id']);

$sql="update member set username='$username' where id='id'";

ps:配置環境不同,有的環境下會對提交的資料自動進行轉義,注意不要重複轉義

2樓:匿名使用者

對輸入的資料進行校驗,如果包含英文的分號、單引號等特殊字元,直接提示輸入資料有誤

3樓:匿名使用者

最簡單的方法,mysql_real_escape_string

stringmysql_real_escape_string ( string$unescaped_string [, resource$link_identifier ] )

本函式將 unescaped_string 中的特殊字元轉義,並計及連線的當前字符集,因此可以安全用於 mysql_query()。

php如何防止sql注入

4樓:小雞再次

額,這是我老師給的答案

答:過濾一些常見的資料庫操作關鍵字,

select ,insert,update,delete,and,*等或通過系統函式addslashes對內容進行過濾

php配置檔案中register_globals=off;設定為關閉狀態.(作用將註冊全域性變數關閉);如接收post表單的值使用$_post['user'],假設設定為on的話$user才接收值

sql語句書寫的時候盡量不要省略小引號(tab上面那個)和單引號

提高資料庫命名技巧,對於一些重要的字段根據程式的特點命名,使之不易被猜中

對於常的方法加以封裝,避免直接暴漏sql語句

開啟php安全模式safe_mode=on

開啟magic_quotes_gpc來防止sql注入,預設為關閉,開啟後自動把使用者提交sql查詢語句進行轉換把"'"轉換成"\'"

控制錯誤資訊輸出,關閉錯誤資訊提示,將錯誤資訊寫到系統日誌

使用mysqli或pdo預處理

5樓:匿名使用者

這個方法比較多,這裡簡單舉個例子:

提交的變數中所有的 ' (單引號), " (雙引號), \ (反斜線) and 空字元會自動轉為含有反斜線的轉義字元,給sql注入帶來不少的麻煩。

請看清楚:「麻煩」而已~這並不意味著php防範sql注入,書中就講到了利用改變注入語句的編碼來繞過轉義的方法,比如將sql語句轉成ascii編碼(類似:char(100,58,92,108,111,99,97,108,104,111,115,116…)這樣的格式),或者轉成16進製制編碼,甚至還有其他形式的編碼,這樣以來,轉義過濾便被繞過去了

// 去除轉義字元

function stripslashes_array($array)

} else if (is_string($array))    return $array;

}@set_magic_quotes_runtime(0);   // 判斷 magic_quotes_gpc 狀態

if (@get_magic_quotes_gpc())

php防範sql注入的**

$keywords = addslashes($keywords); $keywords =

str_replace("_","\_",$keywords);//轉義掉」_」 $keywords =

str_replace("%","\%",$keywords);//轉義掉」%」

怎麼樣在php中阻止sql注入式攻擊

6樓:

php自帶乙個功能可以對輸入的字串進行處理,可以在較底層對輸入進行安全上的初步處理,也即magic quotes。(php.ini

magic_quotes_gpc)。如果magic_quotes_gpc選項啟用,那麼輸入的字串中的單引號,雙引號和其它一些字元前將會被自動加

上反斜槓/。

但magic quotes並不是乙個很通用的解決方案,沒能遮蔽所有有潛在危險的字元,並且在許多伺服器上magic quotes並沒有被啟用。所以,我們還需要使用其它多種方法來防止sql注入。

許多資料庫本身就提供這種輸入資料處理功能。例如php的mysql操作函式中有addslashes()、 mysql_real_escape_string()、mysql_escape_string()等函式,可將特殊字元和可能引起資料庫操作出錯的字

符轉義。那麼這三個功能函式之間有什麼卻別呢?下面我們就來詳細講述下。

雖然國內很多php程式設計師仍在依靠addslashes防止sql注入,還是建議大家加強中文防止sql注入的檢查。addslashes的問題在

於黑客可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為乙個有效的多位元組字元,其中的0xbf5c仍會

被看作是單引號,所以addslashes無法成功攔截。

當然addslashes也不是毫無用處,它是用於單位元組字串的處理,多位元組字元還是用mysql_real_escape_string吧。

另外對於php手冊中get_magic_quotes_gpc的舉例:

if (!get_magic_quotes_gpc())  else

最好對magic_quotes_gpc已經開放的情況下,還是對$_post[』lastname』]進行檢查一下。

再說下mysql_real_escape_string和mysql_escape_string這2個函式的區別:

mysql_real_escape_string 必須在(php 4 >= 4.3.0, php 5)的情況下才能使用。否則只能用

mysql_escape_string ,兩者的區別是:mysql_real_escape_string

考慮到連線的當前字符集,而mysql_escape_string 不考慮。

總結一下:

* addslashes() 是強行加/;

* mysql_real_escape_string()   會判斷字符集,但是對php版本有要求;

* mysql_escape_string不考慮連線的當前字符集。

dz中的防止sql注入就是用addslashes這個函式,同時在dthmlspecialchars這個函式中有進行一些替換$string =

preg_replace('/&((#(/d|x[a-fa-f0-9]));)/',

'&//1',這個替換解決了注入的問題,同時也解決了中文亂碼的一些問題

7樓:匿名使用者

過濾不符合要求的字元。

如何防止phpsql注入式攻擊

php如何防止sql注入?

8樓:小雞再次

額,這是我老師給的答案

答:過濾一些常見的資料庫操作關鍵字,

select ,insert,update,delete,and,*等或通過系統函式addslashes對內容進行過濾

php配置檔案中register_globals=off;設定為關閉狀態.(作用將註冊全域性變數關閉);如接收post表單的值使用$_post['user'],假設設定為on的話$user才接收值

sql語句書寫的時候盡量不要省略小引號(tab上面那個)和單引號

提高資料庫命名技巧,對於一些重要的字段根據程式的特點命名,使之不易被猜中

對於常的方法加以封裝,避免直接暴漏sql語句

開啟php安全模式safe_mode=on

開啟magic_quotes_gpc來防止sql注入,預設為關閉,開啟後自動把使用者提交sql查詢語句進行轉換把"'"轉換成"\'"

控制錯誤資訊輸出,關閉錯誤資訊提示,將錯誤資訊寫到系統日誌

使用mysqli或pdo預處理

9樓:銀馳陳慕

對於網頁來講,注入源頭還是在於使用者提交的資料問題,只要把這個資料控制好,注入是很難成功的。所以,對使用者提交上來的資料需要嚴格過慮及處理。

如何學習php,如何最快速的學習PHP

最簡單的就是網上自學 但是這樣自律性要求很強 而且能力也要強 建議去報一些培訓班之類的 然後找份工作慢慢深造 php相對於其他語言,比較簡單,相對好上手,比較適合零基礎的人學習,自學的話對自己的自律性要求很高,我之前就在領元學校學習的,所以如果可以的話我建議去學習班裡學習,後期邊開發邊學習,問題和錯...

php哪些方式傳送http請求,php如何通過get方法傳送http請求,並且得到返回的引數

第一種實現方式 實用socket程式設計,通常我們實用fsockopen這個函式來建立乙個socket連線,用fputs來傳送版乙個請求 第二種實現方式權 實用php的curl擴充套件,我們使用curl init 來初始化乙個連線,然後設定一堆的curl setopt 的東西來設定url,post的...

急!!php獲取url引數,php如何獲取url的引數

url 傳值只能用get 方法,親,你的前台頁面必須用get方法 你這前台用post 後台用get,然後還用url 你這是要玩壞伺服器的節奏嗎 你兩種方式不對,你post傳值用get獲取 你列印一下 post和 get試試,看看到底哪種能接收到值 這個位址在 server http referer ...