本文以實例形式詳細分析了PHP防止注入攻擊的方法。分享給大家供大家參考。具體分析如下:
PHP addslashes() 函數--單撇號加斜線轉義
PHP String 函數
定義和用法
addslashes() 函數在指定的預定義字符前添加反斜杠。
這些預定義字符是:
單引號 (')
雙引號 (")
反斜杠 (/)
NULL
語法:
addslashes(string)
參數 | 描述 |
string | 必需。規定要檢查的字符串。 |
提示和注釋
提示:該函數可用于為存儲在數據庫中的字符串以及數據庫查詢語句準備合適的字符串。
注釋:默認情況下,PHP 指令 magic_quotes_gpc 為 on,對所有的 GET、POST 和 COOKIE 數據自動運行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。遇到這種情況時可以使用函數 get_magic_quotes_gpc() 進行檢測。
例子
在本例中,我們要向字符串中的預定義字符添加反斜杠:
get_magic_quotes_gpc函數
get_magic_quotes_gpc:
取得 PHP 環境變數 magic_quotes_gpc 的值。
語法: long get_magic_quotes_gpc(void);
傳回值: 長整數
函式種類: PHP 系統功能
內容說明:
本函式取得 PHP 環境設定的變數 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。傳回 0 表示關閉本功能;傳回 1 表示本功能開啟。當 magic_quotes_gpc 開啟時,所有的 ' (單引號), " (雙引號), / (反斜線) and 空字符會自動轉為含有反斜線的溢出字符。
addslashes -- 使用反斜線引用字符串
描述:
string addslashes ( string str)
返回字符串,該字符串為了數據庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(')、雙引號(")、反斜線(/)與 NUL(NULL 字符)。
一個使用 addslashes() 的例子是當你要往數據庫中輸入數據時。例如,將名字 O'reilly 插入到數據庫中,這就需要對其進行轉義。大多數據庫使用 / 作為轉義符:O/'reilly。這樣可以將數據放入數據庫中,而不會插入額外的 /。當 PHP 指令 magic_quotes_sybase 被設置成 on 時,意味著插入 ' 時將使用 ' 進行轉義。
默認情況下,PHP 指令 magic_quotes_gpc 為 on,它主要是對所有的 GET、POST 和 COOKIE 數據自動運行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。遇到這種情況時可以使用函數 get_magic_quotes_gpc() 進行檢測。
例子 1. addslashes() 示例
對于 php.ini 中的 magic_quotes_gpc,是設置為 off 還是為 on 呢?
個人觀點,應該設置為 on
總結如下:
1. 對于magic_quotes_gpc=on的情況,
我們可以不對輸入和輸出數據庫的字符串數據作
addslashes()和stripslashes()的操作,數據也會正常顯示。
如果此時你對輸入的數據作了addslashes()處理,
那么在輸出的時候就必須使用stripslashes()去掉多余的反斜杠。
2. 對于magic_quotes_gpc=off 的情況
必須使用addslashes()對輸入數據進行處理,但并不需要使用stripslashes()格式化輸出
因為addslashes()并未將反斜杠一起寫入數據庫,只是幫助mysql完成了sql語句的執行。
補充:
magic_quotes_gpc 作用范圍是:WEB客戶服務端;作用時間:請求開始時,例如當腳本運行時.
magic_quotes_runtime 作用范圍:從文件中讀取的數據或執行exec()的結果或是從SQL查詢中得到的;作用時間:每次當腳本訪問運行狀態中產生的數據
代碼:
希望本文所述對大家的PHP程序設計有所幫助。
新聞熱點
疑難解答