我對這個邏輯很熟悉,如果你想使用用戶名和密碼對某人進行身份驗證,那麼無論用戶名是否被找到,或者密碼錯誤,你都應該返回相同的錯誤。這個想法是,如果你返回單獨的「用戶未找到」和「用戶發現,但密碼錯誤」錯誤,攻擊者可以嘗試所有用戶名,並找出哪些用戶名是有效的,然後將他們的字典攻擊集中在那些用戶名。對於不存在的REST資源,何時返回404以及何時返回403?
使用REST服務,我有一個只有特定用戶可以訪問的資源,我們稱之爲/foo/{id}
。因此,有多種情況:
用戶試圖訪問
/foo/4
,他們有機會,他們顯然得到了200響應和資源。用戶試圖訪問
/foo/3
並且它不存在。 (我不知道他們是否有權訪問它,因爲它不存在。認爲Facebook上不存在的照片,照片只有當它存在時才擁有所有權信息。)A用戶嘗試訪問
/foo/4
,它存在,但他們沒有訪問權限。
所以我的問題是,什麼樣的返回代碼返回情況2和3?至於我可以看到有選項:
返回404的情況下2,和403的情況下3.但是,這意味着攻擊者可以找出哪些對象存在,類似於密碼例如在第一例。
對於所有示例,畢竟,從用戶的角度返回404,如果他們列出了他們有權訪問該資源的所有資源,則他們無權訪問的資源「不存在」不在列表中。
返回403爲所有示例。
你會做什麼?這裏的標準是什麼?