sql注入與轉義的php函數代碼_PHP教程

來源:互聯網
上載者:User
sql注入:

  正常情況下:

    delete.php?id=3;
    $sql = 'delete from news where id = '.$_GET['id'];

  惡意情況:

    delete.php?id=3 or 1;
    $sql = 'delete from news where id = 3 or 1'; -------如此執行後,所有的記錄將都被刪除

   應該採取相關措施。。。比如用之前先判斷是否是數字等等。

要使自己相信,從用戶端傳來的資訊永遠是不可靠的!!

轉義:

  有時候從用戶端傳來的資料,可能惡意包含些特殊的字元,比如單引號、斜杠等,所以需要轉義,轉義成普通的字元,此時就要用到string addslashes ( string $str ),這個函數可以對某個變數進行轉義。但是,如果對數組裡的元素進行轉義,就用foreach迴圈數組,如下:

複製代碼 代碼如下:
  foreach($_POST as $k=>$v) {
  if(is_string($v)) {
$_POST[$k] = addslashes($v);
  }
  }

  但是如果數組中還包含數組,那就要遞迴進行轉義了,此時用到

    array_walk_recursive(array &$input , callback $funcname [, mixed $userdata ])

  將使用者自訂函數 funcname 應用到 array 數組中的每個單元。本函數會遞迴到更深層的數組中去。典型情況下 funcname 接受兩個參數。input 參數的值作為第一個,鍵名作為第二個。如果提供了選擇性參數 userdata,將被作為第三個參數傳遞給 callback funcname。成功時返回 TRUE, 或者在失敗時返回 FALSE

      也就是說:用自訂的函數,至少要能接收兩個參數,而addslashes()只能接收一個參數所以自訂一個函數如下:

複製代碼 代碼如下:
      function a(&$v,$k){
        $v=addslashes($v);
      }
      array_walk_recursive(&$arr,'a');

系統自動轉義:

  PHP中,有一個魔術引號的概念,如何開啟?答:在PHP.ini中,magic_quotes_gpc=On;重啟apache即可

  魔術引號被開啟後,系統會自動對$_GET,$_POST,$_COOKIE資料進行轉義,在不知情的情況下,再次進行手動轉義的話,就轉多了,要想合理的進行轉義,就要首先判斷,魔術符號是否已經開啟了,用magic_quotes_gpc()進行判斷,不需要傳值,關閉返回0,關閉返回1

複製代碼 代碼如下:
  if(!get_magic_quotes_gpc()) { // 如果魔術引號沒開

  function _addslashes(&$v,$k) {
   $v = addslashes($v);
   }
   array_walk_recursive(&$_GET,'_addslashes');
  array_walk_recursive(&$_POST,'_addslashes');
   array_walk_recursive(&$_COOKIE,'_addslashes');
  }

http://www.bkjia.com/PHPjc/327604.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327604.htmlTechArticlesql注入: 正常情況下: delete.php?id=3; $sql = 'delete from news where id = '.$_GET['id']; 惡意情況: delete.php?id=3 or 1; $sql = 'delete from news where id = 3 or 1'; ---...

  • 聯繫我們

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