簡體   English   中英

春季會議只能通過一個IP進行訪問?

[英]spring session accessible by only one IP?

我有一個帶有會話的小型spring MVC-app,還帶有少量的REST方法。 如果我復制JSESSIONID並將其與“ curl”命令一起使用,則可以從具有不同IP的另一台計算機訪問其余方法,從而“偽造”會話。

有沒有一種方法可以將會話“綁定”到一個IP地址?

你可以使用Spring安全hasIpAddress()檢查春季安全refrence

您可以使用自定義過濾器將會話綁定到IP地址:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    boolean chainCompleted = implementEnforcement(request, response);
    if (!chainCompleted) {
        filterChain.doFilter(request, response);
    }
}

private boolean implementEnforcement(HttpServletRequest request, HttpServletResponse response) throws IOException {
    final String key = "enforcement.ip";
    HttpSession session = request.getSession(false);
    if (session != null) {
        // we have a session
        String ip = request.getRemoteAddr();
        String ipInSession = session.getAttribute(key);
        if (ipInSession == null) {
            session.setAttribute(key, ip);
        } else {
            if (!ipInSession.equals(ip)) {
                // JSESSIONID is the same, but IP has changed
                // invalidate the session because there is a probability that it is
                // a session hijack
                session.invalidate();
                return true;
            }
        }
    }
    return false;
}

它記住用戶的IP地址,然后將當前IP與記住的IP地址進行比較:如果不同,則會話被破壞。

您應該閱讀Spring文檔中編寫的Session Fixation Attack Protection ,該文檔可以在session-management標簽內進行配置。

<session-mangagement session-fixation-protection="migrateSession|none|newSession">
  • migrateSession-創建一個新會話,並將現有會話屬性復制到新會話。 這是默認值。

  • -不做任何事情。 原始會話將保留。

  • newSession-創建一個新的“干凈”會話,而不復制現有會話數據。

會話將固定為一組變量,例如瀏覽器代理,IP。 因此,在您的情況下,curl的瀏覽器代理將不匹配,並且提供的sessionid將無用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM