對於在網站上進行輸入驗證,是否存在安全隱患,需要向用戶披露在給定字段中哪些字符有效或無效?
CWE-200:信息暴露說,人們應該盡量不要洩露“可能對攻擊有用但通常對攻擊者不可用的信息”。一個特定的示例將阻止系統公開堆棧跟踪(地址為 CWE-209:通過錯誤消息公開信息)。
是否應該確保錯誤消息是模糊的,例如“您輸入的文本包含無效字符”?
包含用於驗證客戶端代碼(例如JavaScript)的正則表達式的安全漏洞是否對攻擊者可見?另一種方法是在服務器端驗證輸入,這會在某種程度上降低可用性,因為它將需要更多的後端通信(例如,這可能會導致站點響應和顯示錯誤的速度變慢)。
這是否是一種“通過隱蔽性確保安全”的形式,因為用戶/攻擊者可以通過重複提交不同的字符以查看它們是否產生錯誤來推斷哪些字符有效?
讓用戶體驗減慢攻擊速度值得嗎?
據我所知,我應該注意到OWASP的輸入驗證備忘單和數據驗證開髮指南沒有提供有關此主題的指導。
編輯2020-01-17:
有幾個問題(包括我為撰寫評論而做出的努力的答案)。 為什麼應該進行任何輸入驗證。
首先,感謝@Loek指出OWASP的應用程序安全驗證標準,該註釋在第21頁和第22頁上提供了有關密碼的指南:“驗證沒有限制密碼的密碼組合規則。允許使用的字符類型。不應要求使用大寫或小寫,數字或特殊字符。”
我認為我們都同意限制密碼中的字符通常不是一個好主意(請參見 @Merchako的答案)。正如 @emory指出的一樣,這可能不是一個硬性規定(例如,我看到許多移動應用使用了更易於使用的輔助“ PIN”來保護應用,即使其他人可以訪問)登錄設備。)當我問這個問題時,我並沒有真正記住密碼,但這是評論和答案的一個方向。 因此,出於這個問題的目的,我們將其視為非密碼字段。
輸入驗證是“深度防禦”的一部分,網站,Web服務和應用程序以防止注入攻擊。 OWASP指出,注入攻擊“可能導致數據丟失,損壞或向未授權方洩露,責任追究或拒絕訪問。注入有時會導致主機完全被接管。業務影響取決於用戶的需求。應用程序和數據。”
有關更多詳細信息,請參閱OWASP的#1漏洞, A1-注入和 CWE-20:輸入驗證不正確。請注意,他們倆都說輸入驗證不是完整的防禦措施,而是軟件產品“深度防禦”的一層。