2012-03-22 131 views
1

最近,對XSS及其預防方法產生了興趣。 大部分的XSS預防技術都集中在對無效字符的輸入進行消毒並使用它們。這就產生了一個問題:XSS攻擊 - 消毒輸入vs拒絕

當很明顯目的確實是XSS攻擊時,爲什麼我們試圖去除無效字符,然後繼續使用輸入,而不是直接拒絕輸入,併發送用法到錯誤頁面?

確定每個人都會想到這種方法,但不知何故焦點在於輸入驗證,篩選和重用,而不是拒絕。爲什麼?我在這裏錯過了什麼?

+0

XSS比「無效字符」更多。 – 2012-03-22 18:33:58

+0

@Diodeus:請您詳細說明一下嗎?在我的情況下,我希望我的應用程序中只有一個參數,並且要求是這將是字母數字並且沒有任何特殊字符。因此,如果我找到任何特殊字符,我打算直接將用戶發送到errorPage而無需進一步處理或存儲。這不會照顧XSS嗎? – Raghav 2012-03-22 19:02:13

+0

XSS =跨站點腳本。這是您在頁面上允許第三方內容的地方。此第三方內容會劫持您的頁面。消毒輸入和XSS是兩個完全不同的主題。 – 2012-03-22 19:13:48

回答

1

我使用的規則是,我使用輸入驗證,以確保數據是有效的根據域。如果我期待一個數字並得到一串字母,我會拒絕它。但是,如果我有一個可以包含任何內容的文本字段(比如堆棧溢出評論),輸入驗證和拒絕幾乎是不可能的。所以現在我需要清理/輸出編碼。

1

,因爲大多時候輸入錯誤您已經顯示錯誤頁面

例如

page.php?id=a33 

"select * from table where id = ".((Int)$_GET['id']); 

了「民行」值是0,因爲你正在尋找:

"select * from table where id = 0"; 

加上某些情況下的任何字符串,即使損壞可用於程序將要執行的操作,例如搜索字符串...

再次,不要做任何事情都可能令用戶感到沮喪。更好,如果消毒並顯示警告,如果一些數據丟失

+0

我同意,如果輸入錯誤,我們會向用戶顯示錯誤頁面。但是,當我們向用戶重新顯示unsanitized輸入時,XSS進入畫面。所以,如果我們不打算重新顯示給用戶,那麼我們爲什麼要打擾它的消毒?請注意,我的假設是,如果您希望以某種格式輸入,但輸入含有惡意代碼,則可以安全地假定它是劫機者。 – Raghav 2012-03-22 19:06:12

+0

不是,因爲在某些系統上,在某些瀏覽器上,在某些其他星系中,由於客戶端的配置錯誤或服務器配置不當,可能會導致誤報。一般來說你是對的。但更好的不要給劫機者提示,恕我直言...我的意思是寫「你輸入了空字節,所以請求將被跳過」幫助劫持者排除所有基於空字節的攻擊...所以,靜靜地做。 – skyline26 2012-03-22 19:18:01

+0

+1的建議 – Raghav 2012-03-23 14:29:01