用超級使用者能成功登入系統,用普通賬號在登入系統跳轉到錯誤處理頁面,檢查後台卻沒有任何錯誤。百思不得其解。懷疑問題可能是如下2個原因造成的:
普通賬號沒有相關的許可權?
spring security的配置不正確
經過詳細檢查後,排除了上面的兩個原因。系統在web.xml裡配置了如下的錯誤處理頁面:
1<
error-page
>
2<
error-code
>400
error-code
>
3<
location
>/login/exception.jsp
location
>
4error-page
>
5<
error-page
>
6<
error-code
>403
error-code
>
7<
location
>/login/exception.jsp
location
>
8error-page
>
9<
error-page
>
10<
error-code
>404
error-code
>
11<
location
>/login/login.jsp
location
>
12error-page
>
13<
error-page
>
14<
error-code
>500
error-code
>
15<
location
>/login/exception.jsp
location
>
16error-page
>
為了顯示出系統的詳細錯誤資訊,我們暫時將如上的部分去掉了,重啟伺服器,再次登入,錯誤堆疊被完整的顯示出來了,原來是spring在建立乙個bean的時候,找不到屬性的access method報錯了,導致http 500錯誤。
回過頭來看,為什麼超級管理員就能登入呢?是因為超級管理員登入時,系統會自動跳轉到管理頁面,與普通賬號登入後觸發的系統邏輯不一樣,spring在這個時候並沒有建立我們上面提到的bean。
為什麼spring建立的bean報錯時,後台沒有錯誤呢?我們的log error日誌已經開啟。猜測可能的原因是spring在建立bean錯誤的時候並沒有將這個錯誤資訊輸出到控制台。這個有待驗證。 那麼能否獲取到這個錯誤堆疊資訊,然後展現在我們的錯誤處理頁面呢?這個也有待驗證。
從這個例子可以看出:
1. 在開發階段,有可能出現配置錯誤或程式錯誤的時候,我們應該去掉錯誤處理頁面對映,讓錯誤資訊原形畢露。
2. spring並不是在context loader載入的時候會建立bean,在初始化context loader的時候,spring會做一些校驗,載入class, 但並不會建立bean,這個可以在某個bean的建構函式裡加一段輸出來驗證。
Nginx 配置錯誤導致漏洞
crlf是 回車 換行 r n 的簡稱,即我們都知道在http協議中,http header與http body是用兩個crlf分隔的,瀏覽器就是根據這兩個crlf來提取http 內容 一旦我們能夠控制http頭,通過注入一些crlf這樣就可以控制header和body的分割線,這樣我們就可以向bo...
Nginx 配置錯誤導致漏洞
好好學習,天天向上 由於一些不安全的配置引起的漏洞 無這裡使用1版本 使用vulhub 使用docker啟動 docker compose build docker compose up d 執行成功後,nginx將會監聽8080 8081 8082三個埠,分別對應三種漏洞。nginx會將 uri進...
Druid配置錯誤導致未授權訪問漏洞
在使用xray掃瞄時發現了下圖所示漏洞,經過查閱資料發現為druid的未授權訪問漏洞。druid是阿里巴巴資料庫出品的,為監控而生的資料庫連線池,並且druid提供的監控功能,監控sql的執行時間 監控web uri的請求 session監控,首先druid是不存在什麼漏洞的。但當開發者配置不當時就...