- 基於應用:Spring MVC的
- Java8
- 大多使用攔截器過濾請求了。
問題
我測試我的應用程序和每一個用戶輸入很容易受到HTML /腳本注入攻擊。我使用了某些方法來阻止他們在我的客戶端,但是如果我在表單值被髮布到服務器之前操作了這些表單值,那麼注入成功並損壞了我的網站。那麼我的首要任務就是在服務器端使用相同的檢測方法。我應該這樣做早期的教,但有一些原因,反正...
就是我的
思維是檢查一個攔截器的每個參數。攔截器將驗證頁面提供用戶輸入和表單提交的所有參數。
像這樣
public class ParameterFilteringInterceptor {
// 1. get all request parameters..
// 2. check every values..
// 3. if illegal characters exist in one of them,
// converting or escaping them will start and change them to acceptable values.
// Getting and setting on request parameters is going to occur frequently.
// If good to go, return true
// Or return false with a proper error message.
}
SETUP喜歡這個
<interceptor>
<mapping path="/addform" />
<mapping path="/editform" />
<mapping path="/post" />
<mapping path="/newarticle" />
<mapping path="/newcomment" />
.
.
.
<!-- Depend on the volume of a web application,
these mapping paths could be sooooooooo many. -->
<beans:bean class="com.company.web.interceptor.AuthenticatingInterceptor"></beans:bean>
</interceptor>
所以..我要問的是什麼.. 「這是一個好主意做上面的事情嗎?「
作爲一個慣例,是的,你應該驗證請求中的每個參數,因爲它不能假定請求來自人類通過驗證的UI。您可以使用HDIV等經過驗證的框架,而不是使用自定義驗證。 – manish
爲什麼不通過JSR303註釋驗證模型中的所有輸入。你將不得不編寫更少的代碼。如果您使用的是Spring表單標記,則輸入數據直接進入模型的驗證位置,然後在控制器方法中,如果出現錯誤,則表單頁面在沒有錯誤的情況下重新顯示,然後輸入過程完成。 – underdog
要在每個參數上做到這一點,不管**參數**的含義可能是錯誤的。它可能適用於簡單的情況,但理想情況下,您應該根據語義清理輸入內容。如果你輸入的是HTML頁面上顯示的內容,你想要去掉<<字符。如果你的輸入是一個數學公式,你可能不會。 – biziclop