成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

PHP安全-過濾輸入

瀏覽:212日期:2022-09-12 10:00:05
過濾輸入

過濾是Web應用安全的基礎。它是你驗證數據合法性的過程。通過在輸入時確認對所有的數據進行過濾,你可以避免被污染(未過濾)數據在你的程序中被誤信及誤用。大多數流行的PHP應用的漏洞最終都是因為沒有對輸入進行恰當過濾造成的。

我所指的過濾輸入是指三個不同的步驟:

l識別輸入

l過濾輸入

l區分已過濾及被污染數據

把識別輸入做為第一步是因為如果你不知道它是什么,你也就不能正確地過濾它。輸入是指所有源自外部的數據。例如,所有發自客戶端的是輸入,但客戶端并不是唯一的外部數據源,其它如數據庫和RSS推送等也是外部數據源。

由用戶輸入的數據非常容易識別,PHP用兩個超級公用數組$_GET 和$_POST來存放用戶輸入數據。其它的輸入要難識別得多,例如,$_SERVER數組中的很多元素是由客戶端所操縱的。常常很難確認$_SERVER數組中的哪些元素組成了輸入,所以,最好的方法是把整個數組看成輸入。

在某些情況下,你把什么作為輸入取決于你的觀點。例如,session數據被保存在服務器上,你可能不會認為session數據是一個外部數據源。如果你持這種觀點的話,可以把session數據的保存位置是在你的軟件的內部。意識到session的保存位置的安全與軟件的安全是聯系在一起的事實是非常明智的。同樣的觀點可以推及到數據庫,你也可以把它看成你軟件的一部分。

一般來說,把session保存位置與數據庫看成是輸入是更為安全的,同時這也是我在所有重要的PHP應用開發中所推薦的方法。

一旦識別了輸入,你就可以過濾它了。過濾是一個有點正式的術語,它在平時表述中有很多同義詞,如驗證、清潔及凈化。盡管這些大家平時所用的術語稍有不同,但它們都是指的同一個處理:防止非法數據進入你的應用。

有很多種方法過濾數據,其中有一些安全性較高。最好的方法是把過濾看成是一個檢查的過程。請不要試圖好心地去糾正非法數據,要讓你的用戶按你的規則去做,歷史證明了試圖糾正非法數據往往會導致安全漏洞。例如,考慮一下下面的試圖防止目錄跨越的方法(訪問上層目錄)。

CODE:

<?php

$filename = str_replace(’..’, ’.’, $_POST[’filename’]);

?>

你能想到$_POST[’filename’]如何取值以使$filename成為Linux系統中用戶口令文件的路徑../../etc/passwd嗎?

答案很簡單:

.../.../etc/passwd

這個特定的錯誤可以通過反復替換直至找不到為止:

CODE:

<?php

$filename = $_POST[’filename’];

while (strpos($_POST[’filename’], ’..’) != = FALSE)

{

$filename = str_replace(’..’, ’.’, $filename);

}

?>

當然,函數basename( )可以替代上面的所有邏輯,同時也能更安全地達到目的。不過重要點是在于任何試圖糾正非法數據的舉動都可能導致潛在錯誤并允許非法數據通過。只做檢查是一個更安全的選擇。

譯注:這一點深有體會,在實際項目曾經遇到過這樣一件事,是對一個用戶注冊和登錄系統進行更改,客戶希望用戶名前后有空格就不能登錄,結果修改時對用戶登錄程序進行了更改,用trim()函數把輸入的用戶名前后的空格去掉了(典型的好心辦壞事),但是在注冊時居然還是允許前后有空格!結果可想而知。

除了把過濾做為一個檢查過程之外,你還可以在可能時用白名單方法。它是指你需要假定你正在檢查的數據是非法的,除非你能證明它是合法的。換而言之,你寧可在小心上犯錯。使用這個方法,一個錯誤只會導致你把合法的數據當成是非法的。盡管不想犯任何錯誤,但這樣總比把非法數據當成合法數據要安全得多。通過減輕犯錯引起的損失,你可以提高你的應用的安全性。盡管這個想法在理論上是很自然的,但歷史證明,這是一個很有價值的方法。

如果你能正確可靠地識別和過濾輸入,你的工作就基本完成了。最后一步是使用一個命名約定或其它可以幫助你正確和可靠地區分已過濾和被污染數據的方法。我推薦一個比較簡單的命名約定,因為它可以同時用在面向過程和面向對象的編程中。我用的命名約定是把所有經過濾的數據放入一個叫$clean的數據中。你需要用兩個重要的步驟來防止被污染數據的注入:

l經常初始化$clean為一個空數組。

l加入檢查及阻止來自外部數據源的變量命名為clean,

實際上,只有初始化是至關緊要的,但是養成這樣一個習慣也是很好的:把所有命名為clean的變量認為是你的已過濾數據數組。這一步驟合理地保證了$clean中只包括你有意保存進去的數據,你所要負責的只是不在$clean存在被污染數據。

為了鞏固這些概念,考慮下面的表單,它允許用戶選擇三種顏色中的一種;

CODE:

<form action='process.php' method='POST'>

Please select a color:

<select name='color'>

<option value='red'>red</option>

<option value='green'>green</option>

<option value='blue'>blue</option>

</select>

<input type='submit' />

</form>

在處理這個表單的編程邏輯中,非常容易犯的錯誤是認為只能提交三個選擇中的一個。在第二章中你將學到,客戶端能提交任何數據作為$_POST[’color’]的值。為了正確地過濾數據,你需要用一個switch語句來進行:

CODE:

<?php

$clean = array( );

switch($_POST[’color’])

{

case ’red’:

case ’green’:

case ’blue’:

$clean[’color’] = $_POST[’color’];

break;

}

?>

本例中首先初始化了$clean為空數組以防止包含被污染的數據。一旦證明$_POST[’color’]是red, green, 或blue中的一個時,就會保存到$clean[’color’]變量中。因此,可以確信$clean[’color’]變量是合法的,從而在代碼的其它部分使用它。當然,你還可以在switch結構中加入一個default分支以處理非法數據的情況。一種可能是再次顯示表單并提示錯誤。特別小心不要試圖為了友好而輸出被污染的數據。

上面的方法對于過濾有一組已知的合法值的數據很有效,但是對于過濾有一組已知合法字符組成的數據時就沒有什么幫助。例如,你可能需要一個用戶名只能由字母及數字組成:

CODE:

<?php

$clean = array( );

if (ctype_alnum($_POST[’username’]))

{

$clean[’username’] = $_POST[’username’];

}

?>

盡管在這種情況下可以用正則表達式,但使用PHP內置函數是更完美的。這些函數包含錯誤的可能性要比你自已寫的代碼出錯的可能性要低得多,而且在過濾邏輯中的一個錯誤幾乎就意味著一個安全漏洞。

標簽: PHP
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲综合社区| 亚洲乱码中文字幕| 久久一区二区三区国产精品| 亚洲最新视频在线观看| 成人av在线看| 在线视频欧美区| 日韩理论片一区二区| av亚洲产国偷v产偷v自拍| 欧美日韩中字一区| 亚洲va欧美va国产va天堂影院| 国产综合自拍| 日韩你懂的在线观看| 亚洲精品一区二区三区影院| 日本特黄久久久高潮| 一区二区三区导航| 国产午夜精品福利| 丁香六月综合激情| 欧美中文字幕| 亚洲人成7777| 91亚洲国产成人精品一区二区三| 欧洲另类一二三四区| 亚洲一区二区在线观看视频 | 久久亚洲高清| 伊人性伊人情综合网| 欧美一区二区| 精品少妇一区二区三区免费观看 | 婷婷综合五月天| 99久久国产综合精品女不卡| 欧美日韩国产成人在线91| 亚洲韩国精品一区| 欧美色123| 欧美国产精品久久| 91麻豆免费看片| 日韩欧美一级在线播放| 三级欧美在线一区| 亚洲精品中文字幕在线| 国产精品久久777777| av电影天堂一区二区在线观看| 欧美日韩一区二区电影| 一区二区成人在线视频| 亚洲精品一二| 亚洲欧美一区二区三区国产精品 | 亚洲成人动漫精品| 国产精品尤物| 亚洲一区二区五区| 在线日韩av| 中文字幕一区二区三区不卡在线| 欧美精品九九| 国产精品婷婷午夜在线观看| 欧美理论在线| 日韩精品一区二区三区在线观看| 国产一二精品视频| 欧美一区三区二区| 国产成+人+日韩+欧美+亚洲| 在线成人免费观看| 国产精品538一区二区在线| 欧美猛男超大videosgay| 麻豆一区二区在线| 欧美高清精品3d| 国产成人综合亚洲91猫咪| 日韩欧美国产系列| 久久综合五月| 在线观看免费视频综合| 韩国成人精品a∨在线观看| 精品欧美一区二区久久| 国精品一区二区三区| 日韩激情一区二区| 欧美成人精品福利| 亚洲第一黄网| 日本不卡123| 久久久久久亚洲综合影院红桃| 欧美日韩综合久久| 天天操天天综合网| 日韩视频在线你懂得| 亚洲精品1234| 国内外成人在线| 亚洲国产精品黑人久久久 | 欧美顶级少妇做爰| 国内精品久久久久久久果冻传媒| 性做久久久久久久免费看| 欧美一级黄色录像| 亚洲午夜精品国产| 久久精品免费看| 国产拍欧美日韩视频二区| 99www免费人成精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久久久久久岛国免费| 性欧美xxxx大乳国产app| 国产91在线观看| 亚洲综合小说图片| 精品国产1区2区3区| 国产精品夜夜夜一区二区三区尤| 国产成人99久久亚洲综合精品| 亚洲欧美色综合| 日韩欧美一区二区视频| 国产视频一区三区| 不卡高清视频专区| 无码av免费一区二区三区试看| 2020日本不卡一区二区视频| 亚洲中字在线| 成人激情小说网站| 亚洲电影第三页| 久久精品在线观看| 欧美色偷偷大香| 亚洲二区视频| 成人激情文学综合网| 天使萌一区二区三区免费观看| 亚洲国产成人私人影院tom| 欧美日韩久久不卡| 国产精品毛片一区二区三区| 成人毛片在线观看| 丝袜国产日韩另类美女| 欧美激情一区二区在线| 欧美群妇大交群中文字幕| 日韩一级网站| 成人自拍视频在线观看| 亚洲h在线观看| 中文字幕精品一区二区精品绿巨人 | 久久精品女人天堂| 972aa.com艺术欧美| 激情久久五月天| 亚洲福利一区二区三区| 欧美极品xxx| 欧美一级xxx| 欧美影院精品一区| 99国产成+人+综合+亚洲欧美| 风间由美一区二区三区在线观看 | 国产精品国产三级国产普通话蜜臀| 欧美福利视频一区| 亚洲欧美日韩精品在线| 欧美日韩国产在线一区| 国产成人午夜电影网| 日韩国产一二三区| 亚洲精品国产第一综合99久久| 久久亚洲欧美国产精品乐播 | 欧美一区二区国产| 色婷婷久久综合| 欧美日本高清| 99久久久国产精品| 欧美高清性hdvideosex| 蜜桃av综合| 亚洲国产精选| 欧美一区2区三区4区公司二百| 国产在线精品不卡| 免费成人结看片| 一区二区三区在线影院| 欧美色男人天堂| 韩国成人福利片在线播放| 91丝袜高跟美女视频| 激情六月婷婷久久| 日本成人在线电影网| 伊人久久久大香线蕉综合直播 | 久久先锋影音| 久久精品国产99久久6| 亚洲美女屁股眼交| 国产视频亚洲色图| 久久蜜桃av一区精品变态类天堂| 欧美日韩成人综合在线一区二区| 在线看国产日韩| 色吊一区二区三区 | 国产日韩在线不卡| 国产欧美日韩不卡免费| 久久久欧美精品sm网站| ww亚洲ww在线观看国产| 精品久久人人做人人爱| 欧美精品一区二区久久婷婷| 91麻豆精品国产91久久久资源速度| 欧美日韩不卡一区二区| 538在线一区二区精品国产| 欧美一区二区性放荡片| 欧美一级xxx| 欧美大片在线观看| xfplay精品久久| 国产午夜一区二区三区| 国产日产欧产精品推荐色| 国产日产亚洲精品系列| 国产精品久久久久久久久免费相片 | 在线综合视频播放| 51精品秘密在线观看| 欧美日本精品一区二区三区| 欧美日韩国产一级二级| 欧美福利视频一区| 欧美草草影院在线视频| 久久婷婷国产综合精品青草| 精品粉嫩aⅴ一区二区三区四区| 精品福利一二区| 国产日韩欧美综合在线| 欧美国产日本视频| 亚洲男女一区二区三区| 亚洲成人免费视| 久久99久久99小草精品免视看| 国产一区二区三区四区五区入口| 国产ts人妖一区二区| 97久久精品人人做人人爽 | 欧美肥胖老妇做爰| 精品国产一区二区在线观看| 国产午夜亚洲精品理论片色戒| 亚洲欧洲色图综合| 亚洲香肠在线观看| 免费观看在线综合色|