規則 1:絕不要信任外部資料或輸入
關於 web 應用程式安全性,必須認識到的第一件事是不應該信任外部資料。外部資料(outside data) 包括不是由程式設計師在 php **中直接輸入的任何資料。在採取措施確保安全之前,來自任何其他**(比如 get 變數、表單 post、資料庫、配置檔案、會話變數或 cookie)的任何資料都是不可信任的。
例如,下面的資料元素可以被認為是安全的,因為它們是在 php 中設定的。
清單 1. 安全無暇的**
$myusername = 『tmyer』;
$arrayusers = array(』tmyer』, 『tom』, 『tommy』);
define(」greeting」, 『hello there』 . $myusername);
?>
但是,下面的資料元素都是有瑕疵的。
清單 2. 不安全、有瑕疵的**
$myusername = $_post[』username』]; //tainted!
$arrayusers = array($myusername, 『tom』, 『tommy』); //tainted!
define(」greeting」, 『hello there』 . $myusername); //tainted!
?>
解決方案很簡單:必須對 $_post[』username』] 執行清理**。如果不這麼做,那麼在使用 $myusername 的任何其他時候(比如在陣列或常量中),就可能汙染這些物件。
對使用者輸入進行清理的乙個簡單方法是,使用正規表示式來處理它。在這個示例中,只希望接受字母。將字串限制為特定數量的字元,或者要求所有字母都是小寫的,這可能也是個好主意。
清單 3. 使使用者輸入變得安全
$myusername = cleaninput($_post[』username』]); //clean!
$arrayusers = array($myusername, 『tom』, 『tommy』); //clean!
define(」greeting」, 『hello there』 . $myusername); //clean!
function cleaninput($input)
?>
對輸入進行長度限制和字元過濾,防止SQL注入
長度限制和字元過濾 sql注入攻擊的總體思路 發現sql注入位置 判斷伺服器型別和後台資料庫型別 確定可執 況 對於有些攻擊者而言,一般會採取sql注入法。下面我也談一下自己關於sql注入法的感悟。注入法 從理論上說,認證網頁中會有型如 select from admin where usernam...
php防止sql注入之過濾分頁引數例項
就網路安全而言,在網路上不要相信任何輸入資訊,對於任何輸入資訊我們都必須進行引數過濾。對此,我們先來看看下面的例項 複製 如下 this load library pagination config base url site url guest show config total rows c c...
php 防止mysql注入 php防止sql注入
三個函式 addslashes string 用反斜線引用字串中的特殊字元 username addslashes username mysql escape string string 用反斜槓轉義字串中的特殊字元,用於mysql query 查詢。username mysql escape st...