php安全過濾與執行個體教程
PHP過濾器是一個PHP的擴充,協助你更容易,並且可靠的驗證字串和變數,這樣,你就永遠不會有可能對下面語句而擔心受怕了:
<?php
include($_GET[‘filename’])
?>
甚至更壞的情況:
<?php
mysql_query(“INSERT INTO table (field) VALUES ({$_POST[‘value’]} “);
?>
變數過濾
通過使用過濾器來過濾變數,你可以使用 filter_var() 函數, 讓我們來嘗實驗證一個變數是否為一個整形,例如:
$variable = 1122;
eecho filter_var($variable,FILTER_VALIDATE_INT);
因為這個變數裡儲存的是個整形,所以代碼講顯示 1122. 如果我們的變數值為”a344”, 螢幕上將不會列印出任何內容,因為驗證失敗了。
好,好的,也許你說這無非一個有趣的把戲罷了,但是,還有更多, 讓我們看看,當我們想確認我們的變數是個整形,它的範圍在5到10之間,我們怎麼做:
<?php
$variable = 6;
$minimum_value = 5;
$minimum_value = 10;
echo filter_var($variable,FILTER_VALIDATE_INT,array(“option”=>array(“min_range”=>$minimum_value,”max_range”=>$maximum_value)));
?>
這樣,這個變數則必須在範圍之內—就像上面的例子那樣—數字6將會被顯示在螢幕上。
php提供了一個真正的很好的方法來檢測浮點值—對於我們來說最有用的就是在構建購物車的時候用來檢查值是否有兩位小數點。 例如下面將會顯示”31.53”是一個合法的浮點數。
<?php
$num = 31.53;
if(filter_var($num,FILTER_VALIDATE_FLOAT)===false){
echo $num.” 是合法的”;
}else{
echo $num “ 是個不合法的浮點數”;
}
嘗嘗驗證一個URL的格式? 你可能需要去查看RFC1738規範,然後開啟你的PHP文字編輯器編寫一個類,來驗證它,這可能需要上千行代碼,對不?
好了,實際上,PHP可以通過URL過濾器自動幫你做到這些:
<?php
$url = http://www.somewebsite.domain;
if(filter_var($url,FILTER_VALIDATE_URL) === FALSE){
echo $url.” 不是個合法的 URL<br />”;
}else{
echo $url.” 是個合法的URL<br/>”;
}
現在,你可能說,你說的這些東西對我沒用: 郵件驗證,對它的驗證你肯定得通過Regex,不對嗎? 錯了! PHP的FILTER_VALIDATE_EMAIL 可以使它變得非常簡單,甚至不費吹灰之力:
<?php
$email = wxysky@somehost.com;
if(filter_var($email,FILTER_VALIDATE_EMAIL) === false){
echo $email.” 不合法”;
}else{
echo $email.” 合法”;
}
現在,你是不是覺得可以花時間來瞭解一下它呢?電子郵件驗證是個大難題,特別對於初學者來說,以我看來,我們應該以擁有它們感到幸福。。。
但是,這些還僅僅不夠,讓我們在做些其他的是,比如刪除字串的HTML標籤,怎樣:
<?php
$string = “<p>text</p>”;
echo filter_var($string,FILTER_SANITIZE_STRING);
?>
這樣,我們將得到一個不帶標籤的”text”;
結論:
在這裡,我們看到了PHP過濾器可以做到的幾個例子,當然最重要的是驗證你的代碼—就像我們所有知道的那樣,但是實際怎麼做確實另一回事。 我只想在這裡給你,給寫代碼的朋友,無論你是個新手還是專家—一個被肯定的驗證方式,來協助你從壞的代碼逐漸旅行到好的代碼中來。你的代碼一定是最好的,你可以做到