php的filter擴展小技巧

發表于:2014-01-20來源:IT博客大學習作者:Volcano點擊數: 標簽:php
做為一個合格的web開發人員,一定會牢記一個原則――永遠不能相信用戶輸入的數據,行走江湖,安全第一是很重要的。用戶通過表單或url傳過來的數據,一定要仔細檢查過了,才往后臺數據庫里存進去。

  做為一個合格的web開發人員,一定會牢記一個原則――永遠不能相信用戶輸入的數據,行走江湖,安全第一是很重要的。用戶通過表單或url傳過來的數據,一定要仔細檢查過了,才往后臺數據庫里存進去。在一個成熟的開發團隊里,貫徹這個原則不成問題;但是如果在一個新人老手混搭的小team里,很容易就忽視了這個問題,那么各種安全漏洞比如跨站攻擊,sql注入等等真是防不勝防。

  實際上,用php 5自帶的filter擴展能夠較好的解決這個問題。我在從前的blog里記錄了filter擴展的常規用法――直接利用filter來校驗數據,這樣有不少額外的代碼量,所以我得介紹一個比較偷懶的辦法――自動對所有輸入變量進行過濾,這只需要對php.ini增加一行配置,然后重啟apache或fastcgi讓php配置生效。

  filter.default="special_chars"

  開啟了這項配置后,會自動使用filter_input方法對$_GET, $_POST, $_COOKIE, $_REQUEST以及$_SERVER變量進行過濾轉義。配置中special_chars是常量FILTER_SANITIZE_SPECIAL_CHARS的縮寫,它能自動轉義大部分危險字符例如: '"<>。而php手冊對它的解釋是:

  HTML-escape '"<>& and characters with ASCII value less than 32, optionally strip or encode other special characters.

  在這個情況下,新人們寫出這樣的代碼我也不會太擔心:

  PHP:

  $foo = $_GET['foo'];

  echo $foo;

  在部分場合,我們可能還是需要未轉義的變量,比如某個ajax接受的參數是一段json串,用這段代碼即可獲得原始數據:

  PHP:

  $foo = filter_input (INPUT_GET, 'foo', FILTER_UNSAFE_RAW);

  fitler擴展與yahoo使用的yiv如出一轍,印象里似乎就是yahoo對yiv做了些修改貢獻給php社區,但是暫時沒找到出處。

原文轉自:http://blogread.cn/it/article/1515

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97