get_magic_quotes_gpc函數(shù)是一個(gè)用來判斷是否為用戶提供的數(shù)據(jù)增加斜線了,這個(gè)在php.ini配置文件中,下面我來介紹一下get_magic_quotes_gpc()函數(shù)說明.

get_magic_quotes_gpc函數(shù)介紹

取得 PHP 環(huán)境變數(shù) magic_quotes_gpc 的值,屬于 PHP 系統(tǒng)功能。

語法:long get_magic_quotes_gpc(void);

返回值:長整數(shù)

本函數(shù)取得 PHP 環(huán)境配置的變量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示關(guān)閉本功能;返回 1 表示本功能打開。

當(dāng) magic_quotes_gpc 打開時(shí),所有的 ‘ (單引號(hào)), ” (雙引號(hào)), (反斜線) and 空字符會(huì)自動(dòng)轉(zhuǎn)為含有反斜線的溢出字符。

magic_quotes_gpc設(shè)置是否自動(dòng)為GPC(get,post,cookie)傳來的數(shù)據(jù)中的’”加上反斜線??梢杂胓et_magic_quotes_gpc()檢測系統(tǒng)設(shè)置。

如果沒有打開這項(xiàng)設(shè)置,可以使用addslashes()函數(shù)添加,它的功能就是給數(shù)據(jù)庫查詢語句等的需要在某些字符前加上了反斜線。

這些字符是單引號(hào)(’)、雙引號(hào)(”)、反斜線()與 NUL(NULL 字符)。

默認(rèn)情況下,PHP 指令 magic_quotes_gpc 為 on,它主要是對(duì)所有的 GET、POST 和 COOKIE 數(shù)據(jù)自動(dòng)運(yùn)行 addslashes()。

不要對(duì)已經(jīng)被 magic_quotes_gpc 轉(zhuǎn)義過的字符串使用 addslashes(),因?yàn)檫@樣會(huì)導(dǎo)致雙層轉(zhuǎn)義。遇到這種情況時(shí)可以使用函數(shù) get_magic_quotes_gpc() 進(jìn)行檢測。

例,利用 get_magic_quotes_gpc()預(yù)防數(shù)據(jù)庫攻擊的正確做法,代碼如下:

  1. <?php 
  2. function check_input($value
  3. // 去除斜杠 
  4. if (get_magic_quotes_gpc()) 
  5. $value = stripslashes($value); 
  6. // 如果不是數(shù)字則加引號(hào) 
  7. if (!is_numeric($value)) 
  8. $value = “‘” . mysql_real_escape_string($value) . “‘”; 
  9. return $value
  10. $con = mysql_connect(“l(fā)ocalhost”, “hello”, “321″); 
  11. if (!$con
  12. die(‘Could not connect: ‘ . mysql_error()); 
  13. }//開源代碼phpfensi.com 
  14. // 進(jìn)行安全的 SQL 
  15. $user = check_input($_POST['user']); 
  16. $pwd = check_input($_POST['pwd']); 
  17. $sql = “SELECT * FROM users WHERE 
  18. user=$user AND password=$pwd”; 
  19. mysql_query($sql); 
  20. mysql_close($con); 
  21. ?> 

總結(jié)如下:

1. 對(duì)于magic_quotes_gpc=on的情況,

我們可以不對(duì)輸入和輸出數(shù)據(jù)庫的字符串?dāng)?shù)據(jù)作

addslashes()和stripslashes()的操作,數(shù)據(jù)也會(huì)正常顯示。

如果此時(shí)你對(duì)輸入的數(shù)據(jù)作了addslashes()處理,那么在輸出的時(shí)候就必須使用stripslashes()去掉多余的反斜杠。

2. 對(duì)于magic_quotes_gpc=off 的情況

必須使用addslashes()對(duì)輸入數(shù)據(jù)進(jìn)行處理,但并不需要使用stripslashes()格式化輸出,因?yàn)閍ddslashes()并未將反斜杠一起寫入數(shù)據(jù)庫,只是幫助mysql完成了sql語句的執(zhí)行

轉(zhuǎn)載請(qǐng)注明來源:php中g(shù)et_magic_quotes_gpc()函數(shù)說明

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費(fèi)用,即可穩(wěn)步提升排名至首頁。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。