php魔術引號總結

來源:互聯網
上載者:User


        在一個項目中,魔術引號若是開啟的話,所有的反斜線(\)、單引號(')、雙引號(")、NULL 字元都會被自動加上一個反斜線進行轉義,這和 addslashes() 作用完全相同。 這裡主要講四個與之相關的函數:set_magic_quotes_runtime、magic_quotes_gpc、addslashes、stripslashes。


        set_magic_quotes_runtime(),設定當前magic_quotes_runtime 配置選項的啟用狀態,0為關閉,1為開啟。啥意思呢。這樣理解,如是set_magic_quotes_runtime(1)或是設定檔中magic_quotes_runtime為true(這個在php.ini中配置),那麼php指令碼讀取檔案或是從資料庫中讀取資料,遇到反斜線(\)、單引號(')、雙引號(")、NULL時,會在前面自動加上逸出字元,變成\\、\'、\”、\NULL;若是關閉的話,也就是set_magic_quotes_runtime(0)magic_quotes_runtime為false,那麼便會轉義,此時可以藉助addslashes進行轉義。


        magic_quotes_gpc(),當此值為1時,會對HTTP請求中的G($_GET)、P($_POST)、C($_COOKIE)單雙引號和反斜線進行轉義;反之則不會。該操作一般見於表單提交的資料庫操作,若是值為0時,便用addslashes進行轉義存入資料庫中,取出時再用stripslashes函數把反斜線給去掉。


      特別注意的是在PHP 5.4版本時,魔術引號被移除了,因此轉義都需要加上addslashes函數。


$_GET['des'] = "she's a beauty";foreach (array('_GET', '_POST', '_COOKIE') as $_request){    echo $_request; // _GET_POST _COOKIE    foreach ($$_request as $_key=> $_value){        // $_key為鍵,如_GET,$$_key為$_GET        // $$_key=$_value意思就是把$_GET['des'] = 1111便為$des=she\'s a beauty        $_key{0} != '_' && $$_key=addslashes($_value);        echo $$_key;    }}

        看看上面代碼能夠理解不,這是摘自我晚上看的關於介紹discuz中源碼分析的書,$$_key是否有點繞,應該不會的,就是變數多重引用,可以看看我的 php變數的幾種寫法部落格,上述代碼就是過濾惡意偽造GPC請求預定義變數行為。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.