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

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

PHP安全-過濾輸入

瀏覽:277日期: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中文字幕精品永久在线| 狠狠爱成人网| 亚洲精品少妇| 亚洲免费专区| 日本一区二区三区视频在线看| 一区二区日韩免费看| 伊人久久亚洲| 日韩精品第一| 国产精品久久久久久久免费软件| 欧美色综合网| 美女高潮久久久| 免费在线日韩av| 亚洲精品成人图区| 激情五月色综合国产精品| 亚洲欧美日韩国产综合精品二区| 不卡在线一区二区| 日韩在线观看一区二区| 色8久久久久| 美女尤物国产一区| 国产综合色区在线观看| 不卡在线一区二区| 亚洲日本免费电影| 国产精品亚洲人成在99www| 精品精品国产三级a∨在线| 欧美日韩免费看片| 国产婷婷精品| 国产剧情一区二区在线观看| 日本一区二区免费高清| 在线日韩av| 一区二区日韩免费看| 日韩高清不卡一区二区| 精品日韩一区| 欧美日韩三区| 欧美日韩亚洲一区在线观看| 成人国产精品一区二区网站| re久久精品视频| 91精品国产自产精品男人的天堂| 久久亚洲国产精品尤物| 成人日韩在线观看| 快she精品国产999| 你懂的国产精品| 欧美精品一二| 91成人精品观看| 青青青免费在线视频| 99国产精品视频免费观看一公开| 亚洲天堂日韩在线| 久久精品国产福利| 一区免费视频| 国产精品亚洲综合色区韩国| se01亚洲视频 | 亚洲一区欧美| 精品久久电影| 黄色成人精品网站| 国产三级精品三级在线观看国产| 日本欧美不卡| 欧美精品中文字幕亚洲专区| 国内精品福利| 嫩呦国产一区二区三区av| 国产一区日韩一区| 国产日产一区| 中日韩男男gay无套| 麻豆精品久久久| 日韩精品一区第一页| 国产传媒av在线| 青草国产精品| 中文日韩欧美| 黑人精品一区| 日韩精品久久久久久久软件91| 99久久夜色精品国产亚洲狼| 国产精品视频一区视频二区| 久久亚洲美女| 中文字幕系列一区| 国产精品男女| 免费的成人av| 日韩三区在线| 久久中文精品| 欧美永久精品| 亚洲免费在线| 四虎影视精品| 国产精品二区不卡| 国产伦理一区| 日韩激情视频网站| 在线国产一区二区| 久久久久久夜| 久久av中文| 无码日韩精品一区二区免费| 激情久久五月| 国产精品久久久久久久久久10秀| 日本不卡视频在线观看| 日韩视频久久| 久久久一本精品| 国产一区不卡| 麻豆高清免费国产一区| 国产精品主播| 日韩高清在线一区| 久久av一区| 欧美色图国产精品| 捆绑调教美女网站视频一区| 日韩动漫一区| 中文字幕av一区二区三区人| 午夜宅男久久久| 亚洲成人日韩| 日韩视频免费| 国产亚洲精品v| 视频一区中文| 欧美一区二区三区激情视频 | 在线精品一区| 亚洲中字黄色| 亚洲精品一二三区区别| 久久精品91| 久久久久久色| 日本综合精品一区| 亚洲欧美日本国产| 亚洲男人在线| 日本久久一区| 国产色噜噜噜91在线精品| 欧美精品影院| 国产精品欧美日韩一区| 国产乱码精品一区二区三区亚洲人 | 国精品一区二区| 日本精品在线中文字幕| 午夜精品成人av| 99久久久久| 亚洲激情中文| 三级欧美韩日大片在线看| 日韩精品一二三四| 亚洲人成高清| 国产日韩欧美中文在线| 国产精品亚洲欧美日韩一区在线 | bbw在线视频| 91精品xxx在线观看| 99精品电影| 99视频一区| 噜噜噜久久亚洲精品国产品小说| 亚洲一区国产| 亚洲欧洲美洲国产香蕉| 日本免费一区二区视频| 国产精品大片| 桃色av一区二区| 国产精品97| 亚洲精品少妇| 久久激情五月激情| 精品久久99| 999国产精品视频| 久久国产99| 91精品啪在线观看国产爱臀| 久久字幕精品一区| 亚洲精品国产嫩草在线观看 | 青青青国产精品| 久久中文在线| 久久精品亚洲欧美日韩精品中文字幕| 蜜桃tv一区二区三区| 久久先锋影音| 国产精品免费大片| 三级在线看中文字幕完整版| 婷婷亚洲综合| 欧美自拍一区| 国产粉嫩在线观看| 国产视频一区欧美| 国产日本精品| 日韩大片在线播放| 不卡在线一区| 69精品国产久热在线观看| 三上亚洲一区二区| 国产精品99免费看| 日韩黄色在线观看| 成年男女免费视频网站不卡| 国产高清一区| 欧美日韩亚洲一区三区| 日韩欧美中文| 日韩欧美在线精品| 亚洲黄色中文字幕| 中文字幕av亚洲精品一部二部| 美女视频黄免费的久久| 欧美/亚洲一区| 国产探花一区在线观看| 最新中文字幕在线播放| 日韩精品一级二级| 成人午夜在线| 深夜日韩欧美| 日韩黄色大片网站| 中文字幕乱码亚洲无线精品一区| 国产成人精品免费视| 噜噜噜躁狠狠躁狠狠精品视频| 麻豆久久一区| 蜜臀va亚洲va欧美va天堂| 国产 日韩 欧美 综合 一区| 视频一区视频二区在线观看| 国产一区二区三区日韩精品| 蜜臀久久99精品久久久久宅男 | 久久国产影院| 国产欧美日韩一级| 五月天久久网站| 欧美成人精品午夜一区二区| 夜久久久久久| 91综合网人人| 日韩av成人高清| 亚洲精品极品少妇16p| 精品一区二区三区视频在线播放 | bbw在线视频|