2014-10-11 47 views
-3

難道我總是需要驗證用戶輸入,即使我沒有真正將它們保存到一個數據庫,文件,或利用他們包括文件等。難道我總是需要驗證請求變量

說我只是想回應一個請求變量,或者我用它來發送電子郵件,是否有任何需要驗證或清理它?我一直聽到有人說在做任何事情之前都應該檢查所有的用戶輸入,但是如果我沒有進行上述任何操作,它是否會帶來任何威脅?

+0

如果請求變量包含''?如果你「迴應」它會發生什麼? – JJJ 2014-10-11 17:03:57

+0

即使你只是「迴應」。如果我回應了一個iFrame,你會有什麼感覺? – 2014-10-11 17:04:00

+0

這不僅僅是關於你和你的分數...... – 2014-10-11 17:04:56

回答

0

我不會推薦它。我的規則是 - 絕不信任用戶的輸入。 可以說你的團隊工作。如你所寫,你建立一個簡單的表單,將數據提交給php文件併發送給它。 3周後另一名隊友想要使用該表格。 他假設php文件中的數據是乾淨的。他不知道你沒有過濾它。 這是一個麻煩的破解。

0

難道我總是需要驗證用戶輸入,即使我沒有真正將它們保存到一個數據庫,文件,或利用他們包括文件等。

一切你要用戶提供的數據取決於你將要使用它的上下文。在你的單句中,你已經在討論3種不同的上下文(db,file,include)。所有這些都需要一個不同的策略來防止特定情況下的事情發生。

說我只是想回應一個請求變量或我用它來發送電子郵件,是否有任何需要驗證或消毒?

除驗證和消毒外,還有更多的事情可以做。是的,你應該處理這個案件(這是另一個背景btw)。基本上你應該處理所有用戶數據,就好像它是惡意的一樣。即使你只是「echo」。當你只是「echo ing」時,我可以做很多事情。

考慮到我們是在一個HTML頁面,我可以舉例來說(但不限於)的情況下做的:

<script>location.href='http://example.com/my-malicious-page'</script> 

這對於例如,你的網站有一個登錄表單的精確副本。

<script>var cookies = document.cookie; // send cookieinfo to my domain</script> 

它可以用來獲取當前域的所有cookie(可能包括會話cookie)。 (請注意,可以通過設置cookie上的http only標誌來緩解這種情況)。

<script>document.querySelector('body')[0].appendChild('my maliscious payload containing all kinds of nasty stuff');</script> 

這使得側載病毒或其他令人討厭的東西成爲可能。

<!-- 

搞糟你的佈局/網站。有幾種方法可以做到這一點。

我總是聽到人們說,所有的用戶輸入應該做它

這主要是錯誤的東西之前檢查。一旦你知道你將要做什麼,你只需要決定你將如何處理一段數據。這是因爲你想在不同情況下防止不同的事情。一些例子是(但不限於):目錄遍歷,代碼注入,sql注入,xss,csrf。

以上所有攻擊媒介需要不同的策略來防止它們。

,但它實際上構成任何威脅,如果我沒有做任何上述

是完全如上所述。所有來自第三方的數據(這意味着用戶輸入以及外部服務以及數據庫中的數據)應該被視爲傳染病。