jialisoftw

          PHP防SQL注入函數:mysql_real_escape_string

          我們在使用php+mysql時,一般情況下都要接受用戶輸入的數據,這就意味著很大的風險,因為用戶可能輸入正常數據,也可能輸入惡意的代碼。作為developer,必須嚴格過濾用戶的數據,來保護我們的網站安全。
              PHP中可以使用 mysql_real_escape_string 函數來過濾非法字符。本函數將 string 中的特殊字符轉義,并考慮到連接的當前字符集,因此可以安全用于 mysql_query()。
              mysql_real_escape_string() 函數轉義 SQL 語句中使用的字符串中的特殊字符。下列字符受影響:
          \x00
          \n
          \r
          \
          '
          "
          \x1a
          如果成功,則該函數返回被轉義的字符串。如果失敗,則返回 false。
              飄易利用下面的這個函數,就可以有效過濾了。
          function safe($s){ //安全過濾函數
          if(get_magic_quotes_gpc()){ $s=stripslashes($s); }
          $s=mysql_real_escape_string($s);
          return $s;
          }
              或者在conn公共連接文件里加入,這樣就無需修改代碼了:
          if(get_magic_quotes_gpc()) { $_REQUEST = array_map( 'stripslashes', $_REQUEST); }
          $_REQUEST = array_map( 'mysql_real_escape_string', $_REQUEST);
              mysql_real_escape_string語法
          mysql_real_escape_string(string,connection)
          參數 描述
          string 必需。規定要轉義的字符串。
          connection 可選。規定 MySQL 連接。如果未規定,則使用上一個連接。
              其實,一般的還可以利用這個函數 addslashes 進行轉義。作用同樣為對GET、POST、COOKIE過來的字符串進行轉義處理,通常與 magic_quotes_gpc 結合使用。
              下面講述下addslashes  、magic_quotes_gpc、mysql_real_escape_string 三者之間的區別:
              1、addslashes  與 mysql_real_escape_string,同樣的作用是經過轉義后,可直接插入數據庫, 國內很多PHP coder是使用addslashes函數防止SQL注入,但是建議大家使用后者轉義數據。
              舉例說明:addslashes的問題在于黑客可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效的多字節字符,其中的0xbf5c仍會被看作是單引號,所以addslashes無法成功攔截。
              兩者何時用:addslashes也不是毫無用處,它是用于單字節字符串的處理,多字節字符還是用mysql_real_escape_string更加安全。
              2、magic_quotes_gpc的說明,在首次客戶端運行時,可用第一條的舉例,對 magic_quotes_gpc 進行 $_['name'] 判斷,可轉義處理。
              3、 mysql_real_escape_string和 mysql_escape_string 這2個函數的區別:
              mysql_real_escape_string 必須在(PHP 5以上、PHP 4 >= 4.3.0)版本的情況下才能使用。否則只能用 mysql_escape_string 。
              兩者的區別是:mysql_real_escape_string 考慮到連接的當前字符集,而 mysql_escape_string 不考慮。 
              4、實際開發中,正確的邏輯處理,如下:
              首先,檢查 magic_quotes_gpc 是否配置為自動轉義斜線,若為on,應該調用stripslashes去掉$_REQUEST、$_GET,$_POST、$_COOKIE的轉義斜線;然后,查詢/寫入/更新數據至mysql時,再使用mysql_real_escape_string進行字符轉義
          [參考]:
          1、討論magic_quotes_gpc、mysql_real_escape_string、addslashes的區別及用法
          http://blog.unvs.cn/archives/magic_quotes_gpc-mysql_real_escape_string-addslashes.html

          posted on 2013-01-24 12:38 飛豬一號 閱讀(2134) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2013年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临颍县| 蒙山县| 永安市| 大方县| 双流县| 南平市| 梁平县| 邯郸市| 梧州市| 黔西县| 额济纳旗| 韩城市| 米泉市| 政和县| 界首市| 含山县| 饶阳县| 正定县| 徐水县| 仁布县| 苗栗市| 云浮市| 芦溪县| 赤城县| 深水埗区| 炉霍县| 翁源县| 江华| 云梦县| 黑龙江省| 格尔木市| 长泰县| 田林县| 辽宁省| 阳新县| 福贡县| 七台河市| 望城县| 刚察县| 平定县| 乌兰察布市|