如何解決此問題?驗證POST參數後阻止瀏覽器密碼緩存
應用程序具有帶密碼和其他輸入字段的表單。用戶必須輸入密碼才能提交交易以及其他交易信息。在提交交易時需要密碼作爲安全檢查。
表單輸入值綁定到命令對象。
這是我們的應用程序正在處理這個問題的方法:
void submitAction(FooCommand command){
if(command.hasErrors()){
render(view: ‘show’, model: [command:command])
}
//else do save and redirect
}
我們意識到,通過渲染,而不是重定向,用戶註銷後,用戶的密碼是在瀏覽器緩存中可見。渲染中使用的URL與POST URL相同。用戶註銷後,其他人可以使用瀏覽器後退按鈕並重新提交表單,同時使用類似螢火蟲的工具檢查POST參數並獲取用戶密碼。
還需要將用戶的輸入從表單持久保存到顯示驗證錯誤的頁面。因此,閃存中帶有錯誤消息的簡單重定向將無法滿足此要求。
建議的解決方案是使用chain方法將 命令對象放入閃存範圍,以便重定向可以顯示錯誤和用戶輸入。這可以防止某人在瀏覽器工具中訪問POST URL以及密碼。
void submitAction(FooCommand command){
if(command.hasErrors()){
chain(action: ‘show’, model: [command:command])//redirect instead of render
}
//else do save and redirect
}
一個潛在的缺點是在閃光範圍(最終會),可能在指令預先抓取關係存儲命令對象。在會話中存儲命令對象是否會影響性能?
有沒有更好的解決方案?