get_magic_quotes_gpc函數介紹php
get_magic_quotes_gpc函數是一個用來判斷是否爲用戶提供的數據增長斜線了,這個在php.ini配置文件中哦,本文將介紹一下get_magic_quotes_gpc()函數說明。
取得 PHP 環境變數 magic_quotes_gpc 的值,屬於 PHP 系統功能。mysql
語法: long get_magic_quotes_gpc(void);sql
返回值: 長整數數據庫
本函數取得 PHP 環境配置的變量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示關閉本功能;返回 1 表示本功能打開。安全
當 magic_quotes_gpc 打開時,全部的 ‘ (單引號), 」 (雙引號), (反斜線) and 空字符會自動轉爲含有反斜線的溢出字符。cookie
magic_quotes_gpc設置是否自動爲GPC(get,post,cookie)傳來的數據中的'」加上反斜線。能夠用get_magic_quotes_gpc()檢測系統設置。函數
若是沒有打開這項設置,能夠使用addslashes()函數添加,它的功能就是給數據庫查詢語句等的須要在某些字符前加上了反斜線。post
這些字符是單引號(')、雙引號(」)、反斜線()與 NUL(NULL 字符)。code
默認狀況下,PHP 指令 magic_quotes_gpc 爲 on,它主要是對全部的 GET、POST 和 COOKIE 數據自動運行 addslashes()。ip
不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),由於這樣會致使雙層轉義。遇到這種狀況時能夠使用函數 get_magic_quotes_gpc() 進行檢測。
例
利用 get_magic_quotes_gpc()預防數據庫攻擊的正確作法
代碼以下
<?php function check_input($value) { // 去除斜槓 if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // 若是不是數字則加引號 if (!is_numeric($value)) { $value = 「‘」 . mysql_real_escape_string($value) . 「‘」; } return $value; } $con = mysql_connect(「localhost」, 「hello」, 「321″); if (!$con) { die(‘Could not connect: ‘ . mysql_error()); } // 進行安全的 SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = 「SELECT * FROM users WHERE user=$user AND password=$pwd」; mysql_query($sql); mysql_close($con); ?>
總結以下:
1. 對於magic_quotes_gpc=on的狀況,
咱們能夠不對輸入和輸出數據庫的字符串數據做
addslashes()和stripslashes()的操做,數據也會正常顯示。
若是此時你對輸入的數據做了addslashes()處理,
那麼在輸出的時候就必須使用stripslashes()去掉多餘的反斜槓。
2. 對於magic_quotes_gpc=off 的狀況
必須使用addslashes()對輸入數據進行處理,但並不須要使用stripslashes()格式化輸出
由於addslashes()並未將反斜槓一塊兒寫入數據庫,只是幫助mysql完成了sql語句的執行