<?php // sql的注入與轉義 /* 先下以下例子: del.php?id=3 $sql = 'delete from news where id=' . $_GET['id']; del.php?id=3 or 1; 這時 $sql = 'delete from news where id=3 or 1' 這樣,全部的新聞將都被刪除. */ /* addslashes 能夠對某個變量轉義, 可是,$_POST是一個數組,可能有多個單元, 若是每一個單元手動的addslashes來轉義,工做量大. */ //封裝轉義函數 //咱們用系統提供好一個函數,來對數組進行遞歸 // array_walk_recursive ,這是遞歸處理數組單元的函數 // 函數自己只有一個功能------遞歸的把數組每一個單元走一遍 // 至於你怎麼處理這個數組,本身寫一個函數 function abc(&$v,$key){ $v=addslashes($v); } array_walk_recursive(&$_GET, 'abc'); //這樣就能轉義 $_GET過來的地址,也能夠用魔術引號防注入 //magic_quotes_gpc=On,這是魔術引號的做用---魔術引號開啓時,$_GET,$_POST,$_COOKIE數據,會被系統自動轉義. /* 要想合理的轉義,得先判斷 魔術引號 有沒有開啓 若是開啓了,不要再轉義了, 若是沒開啓,再轉義. */ //合理的判斷 if(!get_magic_quotes_gpc()){ function _addslashes(&$v,$k){ if(is_string($v)){ $v=addslashes($v); } } array_walk_recursive($_GET,'_addslashes'); array_walk_recursive($_POST,'_addslashes'); array_walk_recursive($_COOKIE,'_addslashes'); } ?>