2013-08-05 73 views
0

我目前有一個問題,即actionform的validate方法發生在action的execute方法之前。Struts 1.2 ActionForms&isTokenValid CSRF

這是一個問題,原因是用戶可以提交自己的請求,並且他們應該已經完成​​所有必填字段驗證通過並使用isTokenValid(request)方法我可以看到請求無效。並將它們轉發到「拒絕訪問」頁面。但是,如果他們沒有完成僞造請求中的所有必填字段,則validate方法將返回錯誤,並將其轉發給顯示錯誤消息的實際頁面(.jsp)。

任何想法如何防止這種情況?

+0

爲什麼他們可以得到他們沒有在所有訪問的頁面?無論如何,有幾種選擇,但它取決於當前的應用程序流程,例如,您是使用身份驗證過濾器,自定義請求處理器,「手動」驗證還是通過默認請求處理器進行驗證等。 –

+0

我正在實施CSRF保護。所以用戶會登錄,他們會不小心從惡意網站發起請求。大多數請求通過使用isTokenValid來阻止,但是由於驗證在觸發操作之前失敗,它將轉發到.jsp而不是訪問被拒絕的頁面。注意這可能實際上並不危險,因爲發生的所有事情都是用戶轉發到頁面,而不是惡意的人本身,但仍然希望阻止。我是struts新手,但使用actionForm的驗證方法和海關邏輯。 –

回答

0

要使用令牌在Struts1中實現CSRF預防,您不應該允許直接訪問JSP頁面。

用戶應該通過Struts Actions訪問您的表單,並且這個動作會在它們被轉發到JSP頁面中的表單之前調用saveToken(request)。

如果您通常直接轉發到JSP,您可以更改爲轉發到從ActionForward繼承的操作。在執行中,它可以通過調用父ActionForward執行方法進行轉發。您也可以在新的操作類中實現其他邏輯限制。

這個答案將Struts CSRF問題上單獨的線程也可能是有用的: https://stackoverflow.com/a/5339391/6136697