我已經閱讀了Tomcat CSRF保護文件的文檔,並且我的理解是入口點必須是不執行安全功能的頁面。如何在Java中使用會話失效的Tomcat CSRF保護過濾器
據我所知,使用任何入口點時,都是當前會話中的隨機數的一部分。
但是,根據OWASP前10名推薦,我在用戶登錄並生成新會話時使會話無效。
我發現的問題是,當這樣做完成後,如果用戶點擊僅在登錄後纔可用的鏈接,例如更改密碼,這不構成入口點的一部分,則返回403到新的會議。
如果用戶先點擊其中一個入口點URL,然後他們可以單擊更改密碼鏈接並訪問該頁面,因爲已創建新的臨時值並且更改密碼鏈接將由此覆蓋,但是如果歡迎頁面有用戶需要使用的其他鏈接,他們不能使用後退按鈕並單擊鏈接,然後由於隨機數不相同。
我的問題是如何處理這樣一個事實,即在創建新會話時,如果沒有首先點擊其中一個入口點URL,就無法訪問更改密碼頁面。
我已經看過編碼的URL,但它可能沒有編寫我的代碼來處理此問題,因爲我正在使用JSTL,因爲它的轉義屬性有助於防止XSS,我似乎無法找到方法用這個編碼url。
任何人都可以提供一些建議或選擇,因爲最好做什麼。
如果它會幫助我包括我的控制器servlet的登錄部分,這是通過登錄表單發佈方法達到的。
public class UserController extends HttpServlet {
final static Logger log = LogManager.getLogger(UserController.class);
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
String requestURI = request.getRequestURI();
String url = "";
// Register a new user
if (requestURI.endsWith("/subscribeToSite")) {
url = subscribeToSite(request, response);
}
// Login
if(requestURI.endsWith("/logInToSite")){
url = logInToSite(request, response);
}
//try to login
User user = UserDB.loginUser(mPNum, upwd);
if(user==null){
url = "/loginerror.jsp";
}else{
HttpSession session = request.getSession();
session.invalidate();
session=request.getSession(true);
session.setAttribute("loggedUsrID", user.getUserID());
session.setAttribute("loggedUsrFName", user.getFName());
url="/schedule/welcome.jsp";
}
return url;
}//EO user login
任何人有想法? – Graham
好的,我轉發我的所有請求,並發現 https://stackoverflow.com/questions/36530341/not-able-to-authenticate-post-request-for-csrf-token-with-tomcat 但添加調度員沒有解決這個問題,我唯一能做到這一點的方法是不會使會話無效。 – Graham