1

親愛的WordPress開發爲什麼建議清理Wordpress Customizer選擇框,複選框和單選按鈕?

我一直無法找到一個明確的回答這個問題,這是由this post通過圍繞主題定製主題基金啓發賈裏德約消毒和this article。特別是,這裏是後者的引用:

如果輸入是1(表示複選框),則函數 返回1。如果輸入是其他任何內容,則函數 將返回空白字符串。這可以防止將 保存到數據庫中的任何有害物質。

關於防止有害物質被保存到數據庫的最後一行是我們都可以同意的,我想。但是我沒有得到的是如何從複選框中獲得任何有害的東西 - 除非你編程錯誤 - 因爲只有兩個可能的值?

因此,如果在這種情況下進行消毒以防止這種情況:由於編程錯誤導致的「數據損壞」,我不知道這是好事還是壞事。

我認爲只有當您的輸入是文本或文本框時對數據進行清理纔有意義 - 至少在防止有害內容是您的目標時。我知道你有時需要格式化數據以使它們有用,但這是一個不同的主題。

回答

1

這大約防止被保存到數據庫 有害的東西最後一行是我們所有人都能夠同意

的事情是,「有害」是相當在意的上下文。數據庫中的JavaScript本身無害 - 如果在其他用戶的會話中輸出爲HTML,則它只是「有害的」。其結果是這種類型的漏洞(XSS)更好地通過輸出編碼來處理。也就是說,當內容輸出到頁面時,它應該是HTML編碼的。這會使腳本標記輸出爲&lt;script;&gt;,它只是將文字<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並創建自己的管理員用戶。在回發中再次「清理」該複選框可確保您的應用程序僅接受有效值。

+0

我明白了。所以,我猜測它的真正原因是攻擊者可以攔截髮布的數據並插入他/她自己的值。我可以想象,這樣的XSS攻擊不斷被瀏覽器開發人員解決和處理,但如果攻擊者真的可以控制插入和操縱輸入類型的值等,我可以想到不止一種情況,即輸入消毒無效。說我爲字體大小做了一個輸入。如果數據的有效性是這裏的目標,我想16和200都會通過。但是,其中一個可能會毀了一個網站。 –

+0

XSS預防真的是網站開發者,而不是瀏覽器開發者。但是,支持CSP和XSS保護頭的瀏覽器可以提供幫助。在你的例子中,輸入sanitisation不是徒勞的,你只是驗證字體大小是合理的(例如<= 30pt)。 – SilverlightFox

+0

唯一的問題是,這會削弱合法用戶試圖獲得超過30的字體大小(他們存在,我知道他們這樣做)的用戶體驗。但即便如此,這是一個視角問題。在我的書中,如果攻擊者設法將值設置爲與我設置的值不同的值,即使它低於可接受的邊界,網站也會受到攻擊。如果我將它設置爲16並且期望它是16,那麼25就不會這樣做。你明白我的意思是徒勞嗎? –