我將在我的例子中使用PHP,但我的問題適用於任何編程語言。Web開發:如果管理員後端應該如何鎖定?
每當我處理,可以在沒有登錄誰的用戶填寫表單(換言之,不受信任的用戶),我做幾件事情,以確保它是安全的數據庫來存儲:
- 驗證$ _POST中是否存在所有預期的字段(使用Firebug等工具刪除了所有字段)
- 確認$ _POST中沒有意外的字段。這樣,數據庫中的字段不會意外地被寫入。
- 確認所有預期字段都是預期類型(幾乎總是「字符串」)。這樣,如果惡意用戶修改代碼並在字段名稱的末尾添加「[]」,就不會出現問題,因此PHP會將該字段視爲數組,然後對其執行檢查它是一個字符串。
- 驗證是否填寫了所有必填字段。
- 確認所有字段(包括必填字段和可選字段)都已正確填寫(例如,電子郵件地址和電話號碼的格式均爲預期)。
- 與前一項相關,但值得成爲自己的項目:驗證下拉菜單中的字段是否使用實際位於下拉菜單中的值提交。同樣,用戶可以修改代碼並將下拉菜單更改爲任何他們想要的。
- 爲了防止用戶有意或無意地包含惡意代碼,對所有字段進行清理。
我不認爲上述任何東西都是矯枉過正的,因爲正如我所提到的,填寫表格的用戶是不可信的。
但是,當涉及到管理員後端時,我不確定所有這些都是必需的。這些是我仍然認爲必要的事情:
- 驗證是否填寫了所有必填字段。
- 確認所有字段(包括必填字段和可選字段)都已正確填寫(例如,電子郵件地址和電話號碼的格式均爲預期)。
- 爲了防止用戶有意或無意地包含惡意代碼,對所有字段進行清理。
我在考慮刪除剩餘的項目,以節省時間和更少的代碼(因此,更多的可讀代碼)。這是一個合理的事情要做還是值得平等對待所有形式,而不管它們是否由可信用戶填寫?
這些是僅有的兩個原因,我可以爲什麼它可能是明智的,平等對待所有形式的想到:
- 可信用戶的憑證可能是由一個不受信任的用戶被發現。
- 受信任的用戶的機器可能會感染惡意軟件,並與表單混淆。我從來沒有聽說過這種惡意軟件,並懷疑這是一件真正令人擔憂的事情,但無論如何這都是需要考慮的事情。
謝謝!
根本不需要做出妥協。如果CSRF /表單字段驗證代碼被正確抽象,您應該能夠透明地在所有表單中使用它。如果每次從零開始重新寫入,顯然是一件難以重複的事情。 – deceze