亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ServletRequest::setAttribute 在 Web 服務安全方面是否安全?

ServletRequest::setAttribute 在 Web 服務安全方面是否安全?

米琪卡哇伊 2022-06-30 19:15:46
精簡版javax.servlet.ServletRequest的方法是否setAttribute(<key>, <Object>)僅用作在 Java 代碼中的方法之間傳遞對象的一種手段?長版假設我有一個javax.servlet.Filter使用 cookie 處理所有登錄用戶身份驗證的實現:在 Spring Boot 中@Component@Order(Ordered.HIGHEST_PRECEDENCE)public class AuthFilter implements Filter {    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {        Cookie[] cookies = null;        if (request instanceof HttpServletRequest) {            cookies = ((HttpServletRequest) request).getCookies();        }        Optional<User> user = mySessionAuthMethod(cookies);        if (user.isPresent()) {            request.setAttribute("user", user.get());        }        chain.doFilter(request, response);    }}然后,我可以避免在所有 Web API 方法中進行手動身份驗證,而只需檢查user屬性。@RestControllera的方法示例:@RequestMapping(value = "/profile")@CrossOrigin(origins = {MyProperties.ORIGIN}, allowCredentials = "true")public ResponseEntity getProfile(HttpServletRequest request, HttpServletResponse response) {    String user = request.getAttribute("user");    if (user != null) {        return myGetProfileResponse(user);    }    return myNotLoggedInResponse();}我的問題是:這種形式的身份驗證安全嗎?我的意思是,ServletRequestJava 中唯一添加和使用的屬性是用于方法之間的通信,還是可以在到達服務器之前將它們添加到請求中?這種身份驗證方式是否使用Filter良好的做法來避免重復代碼?附加說明這樣做的真正原因不僅僅是身份驗證。我還有Filters 需要處理每個請求并將對象傳遞給Controllers。我絕對想要的是,即使是知道系統實現的人也不能偽造這些對象和信息。
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

我想我已經從文檔中找到了答案getAttribute

可以通過兩種方式設置屬性。servlet 容器可以設置屬性以提供有關請求的自定義信息。例如,對于使用 HTTPS 發出的請求,該屬性javax.servlet.request.X509Certificate可用于檢索有關客戶端證書的信息。也可以使用 以編程方式設置屬性ServletRequest#setAttribute。這允許在調用之前將信息嵌入到請求中RequestDispatcher

所以根據這個(如果沒有丟失信息),傳遞自定義對象應該是完全安全的,并且知道它們總是由服務器創建的。


查看完整回答
反對 回復 2022-06-30
  • 1 回答
  • 0 關注
  • 230 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號