日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

PHP安全-過濾輸入

瀏覽:283日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜久久美女| 91九色精品国产一区二区| 成人片免费看| 欧美国产不卡| 久久精品一区| 日韩高清在线不卡| 中文字幕一区二区三区日韩精品| 欧美国产91| 国产一区二区三区四区五区传媒| 美女精品久久| 色偷偷色偷偷色偷偷在线视频| 超碰超碰人人人人精品| 久久久久午夜电影| 五月天久久777| 免费久久99精品国产| 亚洲精品自拍| 国产日韩1区| 卡一卡二国产精品| 日韩精品水蜜桃| 好吊视频一区二区三区四区| 爽好久久久欧美精品| 亚洲影院天堂中文av色| 国产日韩欧美一区二区三区在线观看 | 91av亚洲| 日韩免费一区| 丝袜诱惑制服诱惑色一区在线观看| 免费成人在线影院| 国产日韩高清一区二区三区在线 | 丁香婷婷久久| 欧美日韩四区| 91精品国产自产在线丝袜啪| 精品国产中文字幕第一页| 日韩在线高清| 只有精品亚洲| 国产伦理久久久久久妇女| 精品国产aⅴ| 欧美日韩精品一区二区视频| 综合一区二区三区| 精品国产精品国产偷麻豆| 亚洲激情久久| 国产日韩欧美一区| 99久久婷婷| 最新国产精品久久久| 精品国产乱码久久久| 在线一区电影| 国产日韩一区二区三区在线| 99精品美女| 欧美日韩亚洲三区| 99国产精品免费视频观看| 在线精品亚洲| 精品五月天堂| 99精品综合| 日韩av三区| 欧美日韩在线观看视频小说| 日本午夜精品视频在线观看| 日韩啪啪电影网| 日韩超碰人人爽人人做人人添| 四季av一区二区凹凸精品| 国产模特精品视频久久久久| 国产另类在线| 国产亚洲网站| 国产成人精品亚洲线观看| 亚洲精品日韩久久| 日韩三区免费| 日本精品另类| 蜜臀av免费一区二区三区| 国产精品第一国产精品| 狠狠色狠狠色综合日日tαg| 麻豆极品一区二区三区| 免费成人在线影院| 91精品一区国产高清在线gif | 中文在线资源| 久久国产视频网| 午夜久久一区| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产美女高潮在线观看| 中文字幕一区二区三区日韩精品 | 视频一区视频二区在线观看| 国产精品久久久久久久免费观看| 亚洲精品亚洲人成在线观看| 亚洲婷婷免费| 精品三区视频| 亚州国产精品| 亚洲欧洲一区| 欧美日韩视频免费观看| 乱一区二区av| 日本成人一区二区| 国产视频一区在线观看一区免费| 欧美一级鲁丝片| 欧美激情视频一区二区三区在线播放| 久久99伊人| 一区在线视频观看| 91精品一区二区三区综合在线爱| 精品国产一区二区三区av片| 国产欧美亚洲一区| 亚洲精品成a人ⅴ香蕉片| 欧洲激情综合| 日韩美女一区二区三区在线观看| 免费一级欧美片在线观看网站| 日本成人中文字幕在线视频| 蜜桃91丨九色丨蝌蚪91桃色| 国产国产精品| 99久久精品费精品国产| 日韩专区精品| 岛国av在线播放| 精品一区二区三区在线观看视频 | 麻豆精品在线播放| 久久黄色影视| 欧美亚洲色图校园春色| 日韩在线观看中文字幕| 中文在线不卡| 91精品91| 欧美99久久| 亚洲一本视频| 激情五月综合网| 亚洲午夜在线| 五月天综合网站| 91久久久精品国产| 国产欧美自拍| 国产精品久久久久久久久免费高清| 日韩国产一区二| 久久亚洲影院| 丝袜美腿亚洲一区二区图片| 首页欧美精品中文字幕| 国产精品美女| 一区二区亚洲精品| 最新亚洲一区| 香蕉成人久久| 亚洲一区有码| 日本一区二区三区视频在线看| 日韩欧美另类中文字幕| 中文一区一区三区免费在线观| 在线观看一区| 日本不卡一区二区| 国产伦理一区| 久久亚洲精精品中文字幕| 麻豆91在线播放| 日韩国产一区二区| 伊人久久大香线蕉av不卡| 在线日韩av| 黄色成人精品网站| 日韩制服丝袜av| 亚洲精选成人| 久久激情五月婷婷| 国产在视频一区二区三区吞精| 美女一区网站| 伊人久久大香线蕉av超碰演员| 蜜臀精品久久久久久蜜臀| 日韩精品电影一区亚洲| 国产精品主播在线观看| 精品久久久久久久| 久久精品中文| 久久亚洲图片| 91国内精品| 精品视频一区二区三区在线观看| 国产一区调教| 欧美搞黄网站| 亚洲永久精品唐人导航网址| 久久激情五月婷婷| 国产一区二区色噜噜| 久久精品官网| 玖玖精品视频| 国产欧美丝祙| 日韩视频网站在线观看| 国产精品毛片| 久久国产三级精品| 亚洲综合电影| 丝袜美腿成人在线| 久久成人高清| 久久精品卡一| 黄色av一区| 国产精品4hu.www| 欧洲亚洲一区二区三区| 蜜臀久久99精品久久久久久9| 国产欧美日韩一区二区三区四区 | 日韩视频中文| 日本va欧美va精品发布| 精品免费av一区二区三区| 欧美综合另类| 日韩不卡一二三区| 欧美日韩视频免费观看| 亚洲麻豆一区| 日韩深夜视频| 一区二区高清| 国产91在线播放精品| 日韩一级网站| 国产午夜久久av| 国产91一区| 国产日韩中文在线中文字幕| 欧美日韩尤物久久| 日韩高清一区二区| 国产超碰精品| 日韩精品免费视频一区二区三区| 福利片在线一区二区| 国产免费成人| 精品日韩一区| 色8久久久久| 国产99久久久国产精品成人免费| 久久激情五月激情| 日韩视频不卡|