php中使用過濾功能的輸入驗證

來源:互聯網
上載者:User
  1. if (isset($_GET["value"])) {
  2. $value = $_GET["value"];
  3. }
  4. else {
  5. $value = false;
  6. }
  7. if (is_numeric($value) && ($value >= 15 && $value <= 20)) {
  8. // run my code
  9. }
  10. else {
  11. // handle the issue
  12. }
複製代碼

這是一個非常基本的例子,我們已經寫更多的行,我想看到??的。首先,因為我們不能確定設定的$ _GET,代碼執行適當的檢查,使指令碼不翻倒。其次是美元值現在是一個“髒”的變數,因為它已被直接從指定的$ _GET價值的事實。我們需要照顧,不使用美元的價值在代碼的其他地方的情況下,我們打破任何東西。再有就是,16.0 is_numeric()函數是有效,因為各種語氣詞它的問題。最後,我們必須與事實問題,如果聲明是了一口採取位,是一個額外的邏輯位通過當你通過代碼跟蹤工作。現在比較上面的例子:

  1. $value = filter_input(INPUT_GET, "value", FILTER_VALIDATE_INT,
  2. array("options" => array("min_range" => 15, "max_range" => 20)));
  3. if ($value) {
  4. // run my code
  5. }
  6. else {
  7. // handle the issue
  8. }
複製代碼

不會讓你感覺溫暖和模糊?filter_input()處理的$ _GET值沒有被設定,所以你不必強調指令碼是否接收正確的資訊,或不。你也不必約擔心美元價值是骯髒的,因為它已被證實之前,它已經被分配。注意現在的16.0不再有效。最後,我們的邏輯不再複雜。這隻是一個快速檢查為truthy值(filter_input()如果驗證失敗,將返回false和null如果沒有設定$ _GET [“價值”)。顯然,在一個真實的世界設定,你可以提取數組儲存在設定檔中的變數到某個地方,以便可以得到的東西,甚至無需進入商務邏輯改變。華麗!現在,你可能會想,這可能是有用搶一對夫婦的簡單指令碼的$ _GET或$ _POST變數,但內部使用的函數或類約?幸運的是,我們有該filter_var() 。filter_var()函數被引入,同時作為filter_input()做同樣的事情。

  1. //這是一個樣本函數,不使用這實際上電子郵件,

  2. //那將是愚蠢的。

  3. function emailUser($email) {
  4. mail($email, "Here is my email", "Some Content");
  5. }

複製代碼

這裡的危險是,有沒有試圖發送一封電子郵件,從字面上任何值可以儲存在停止郵件()函數$電子郵件。這可能會導致無法寄送電子郵件,或東西越來越可能在最壞的情況下使用的惡意功能。我所看到的人做的 ??結果支票的mail() ,這是很好看,如果該函數成功完成,但損害的是時間值返回。像這樣的東西是更加理智:

  1. // This is a sample function, do not use this to actually email,
  2. // that would be silly.
  3. function emailUser($email) {
  4. $email = filter_var($email, FILTER_VALIDATE_EMAIL);
  5. if ($email !== false) {
  6. mail($email, "Here is my email", "Some Content");
  7. }
  8. else {
  9. // handle the issue invalid email address
  10. }
  11. }
複製代碼

用了很多例子,包括上述的問題是,他們是基本的。你可能會想,不能用於基本檢查以外的任何filter_var()或filter_input() 。並允許你在一個過濾器傳遞給這些函數稱為FILTER_CALLBACK。FILTER_CALLBACK使您可以通過在您建立將接受被過濾的變數輸入功能-這是哪裡,你就可以開始,因為有很多的樂趣,你就可以開始自己的商務邏輯應用到您的過濾。一些潛在的缺陷這些功能是非常偉大,他們讓你做一些真正強大的過濾,我們已經討論過,可以協助提高你的代碼的安全性和可靠性。但是也有一些潛在的缺點,我會覺得我是失職的,如果我不指出來。主要缺陷是,只要你的過濾器適用於它的功能是。最後一個例子,使用電子郵件驗證-如何處理電子郵件地址改變5.2.14和5.3.3之間FILTER_VALIDATE_EMAIL,即使假設所有的應用程式上運行同一版本的PHP有電子郵件地址,在技術上是有效,你可能不希望。請確保您知道您所使用的過濾器。第二個陷阱是,人們認為,如果他們在一些過濾器,然後把他們的代碼是安全的。篩選的變數去一些協助,但它不會使你的代碼100%安全不受虐待。我很想談談這個問題,但超出了本文的範圍和我的字數已經是相當高的! 總結:我想你在你的代碼的一個函數,只有一個,看看會發生什麼,當你在不同的資料類型和不同的價值觀傳遞。然後,我想你申請一些在這裡討論的過濾方法,看看是否有在您的代碼如何執行差異。我很想知道你是怎麼在評論。

  • 聯繫我們

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