這大約防止被保存到數據庫 有害的東西最後一行是我們所有人都能夠同意
的事情是,「有害」是相當在意的上下文。數據庫中的JavaScript本身無害 - 如果在其他用戶的會話中輸出爲HTML,則它只是「有害的」。其結果是這種類型的漏洞(XSS)更好地通過輸出編碼來處理。也就是說,當內容輸出到頁面時,它應該是HTML編碼的。這會使腳本標記輸出爲<script;>
,它只是將文字<script>
實際輸出到顯示的頁面。
但我不明白的是你如何能得到從 複選框有害的東西 - 除非你的編程錯誤 - 因爲只有 兩個可能的值?
如果攻擊者操縱張貼的數據,則不能執行此操作。例如,如果您的複選框被定義爲
<input type="checkbox" name="agreeToTCs" />
此檢查時將發出agreeToTCs=on
您的應用程序。
攻擊者可以操縱POST請求,然後將其更改爲agreeToTCs=evil
。這相當於在HTML和正在檢查的框中指定
<input type="checkbox" name="agreeToTCs" value="evil" />
。
爲什麼建議清理Wordpress Customizer選擇框, 複選框和單選按鈕?
所有這些歸結爲您的應用程序只應該處理有效的數據。作爲一個簡單的例子,設想一個系統,可以讓您在創建新用戶時爲其選擇用戶級別。部分系統設計只允許您指定一個等於或低於自己的用戶。這是爲了防止低級別的用戶創建管理員帳戶,然後獲得完整的權限。說,如果你登錄時所遵循的下拉可呈現爲HTML中等水平的用戶:
<select name="userLevel">
<option value="low">low</option>
<option value="medium">medium</option>
</select>
而當這是發送到服務器例如發送了userLevel=medium
。但是,攻擊者可能能夠操縱POST的數據到userlevel=admin
並創建自己的管理員用戶。在回發中再次「清理」該複選框可確保您的應用程序僅接受有效值。
我明白了。所以,我猜測它的真正原因是攻擊者可以攔截髮布的數據並插入他/她自己的值。我可以想象,這樣的XSS攻擊不斷被瀏覽器開發人員解決和處理,但如果攻擊者真的可以控制插入和操縱輸入類型的值等,我可以想到不止一種情況,即輸入消毒無效。說我爲字體大小做了一個輸入。如果數據的有效性是這裏的目標,我想16和200都會通過。但是,其中一個可能會毀了一個網站。 –
XSS預防真的是網站開發者,而不是瀏覽器開發者。但是,支持CSP和XSS保護頭的瀏覽器可以提供幫助。在你的例子中,輸入sanitisation不是徒勞的,你只是驗證字體大小是合理的(例如<= 30pt)。 – SilverlightFox
唯一的問題是,這會削弱合法用戶試圖獲得超過30的字體大小(他們存在,我知道他們這樣做)的用戶體驗。但即便如此,這是一個視角問題。在我的書中,如果攻擊者設法將值設置爲與我設置的值不同的值,即使它低於可接受的邊界,網站也會受到攻擊。如果我將它設置爲16並且期望它是16,那麼25就不會這樣做。你明白我的意思是徒勞嗎? –