PHP magic_quotes_gpc的正確處理方式

來源:互聯網
上載者:User
關鍵字 PHP magic_quotes_gpc的正確處理方式

大多的PHP程式,都有這樣的邏輯:

如果發現php.ini配置為不給GPC變數自動添加轉義斜線,則PHP自動為GPC添加轉義斜線

但是事實上,這是錯誤的,因為它改變了GPC變數原來的值.

有這個遺留習慣的原因是PHP程式使用往往配合mysql, 而mysql對特殊字元的轉義,採取的是添加轉義斜線,但是其它資料如mssql,oci呢,不一定是這樣的.

如果使用其它類型資料庫,如mssql,oci,sybase 那麼,給GPC添加轉義斜線,更是個錯誤

進一步,如果GPC資料不需要存入資料庫,而儲存到檔案系統,或轉寄給其它程式呢?更是很嚴重的錯誤邏輯.


所以,正確的做法是:
1.PHP程式入口去掉轉義斜線(若php.ini配置為自動添加轉義斜線)
2.在寫入mysql時,使用mysql_real_escape_string而不是addcslashes來轉義變數
因為前者比後者更為安全(字元集相關的)

db類中已考慮到這個問題,詳情參閱db_mysql.class.php,搜尋mysql_real_escape_string

目前有以下案例:
積分商城的php.ini配置為自動添加轉義斜線,使用者提交的資料寫入cookie時,需要及時去掉斜線
discuz 6.0的論壇,特殊使用者名稱中的"頫"經過addcslashes處理後,竟然變成"頫\",後面多了一個斜線,這是discuz 6的一個bug.

那麼,綜述一下:
1.針對系統管理員,應該配置php.ini
magic_quotes_gpc=Off
magic_quotes_runtime=Off
magic_quotes_sybase=Off

針對php開發人員,更準確的邏輯:

1.檢查php環境是否配置為自動添加轉義斜線,若是,應該調用stripslashes去掉$_REQUEST, $_GET,$_POST,$_COOKIE的轉義斜線

2.查詢/寫入/修改資料至mysql時,再使用mysql_real_escape_string轉義之。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.