2011-04-19 65 views
1

解析和驗證輸入時,兩個指令彼此緊張。檢查輸入,可比性與強壯

  1. 檢查一切以確保安全。不要讓垃圾進入,因爲它會導致誰知道什麼。

  2. 請允許接受輸入(但嚴格執行輸出),否則會造成不必要的不​​兼容。

什麼原則決定應用哪個規則?我最好的猜測是(1)適用於你正在驗證將在別處傳遞的數據的情況。還有其他的考慮嗎?

回答

1

我想說#1更多地應用於輸入內容(它真的是一個人的名字,還是DROP TABLE命令?),而#2更多地應用於輸入的格式(幾乎無效的XML - 我們知道你的意思,所以我們會接受它)。

我也認爲實現#2的各種情況(接受糟糕的HTML或XML;允許沒有分號的分行結束的javascript)被證明是錯誤的。

+0

你能澄清你的第二點嗎?什麼是你認爲是#2良好應用的線索是一個錯誤?這是否因爲它巧妙地允許了狡猾的內容;或者它是一個「社交」錯誤,因爲它鼓勵用戶發送狡猾的輸入。 – 2011-04-19 15:33:47

+0

後者;允許糟糕的HTML在網絡的早期被廣泛採用,結果造成了很多蹩腳的HTML。最好早點劃清界限。在我看來,當然。至於什麼是線索......當然,任何成爲潛在永久性基礎設施(網站,網絡服務)一部分的輸入都應該保持比臨時輸入(網絡表單輸入)更高的標準。 – 2011-04-19 15:48:15