2016-03-06 71 views
2

我正在處理的遺留應用程序讓用戶填寫大量問題,並在調查問卷最後一批保存答案。這個過程很漫長,典型的用戶可能會在某個時間點經歷一次超時。無休止的會議:任何安全風險?

該團隊提出了無限期會議的想法來繞過這個問題。谷歌搜索後,我發現了很多文章解釋如何增加超時;然而我沒有遇到過揭露這種做法風險的文章。乍一看,我覺得有理由設置超時時間。

我的問題是:

  • 你覺得無盡的會話可能開闢一個安全隱患?
  • 如果是這樣做,典型的風險是什麼?

回答

1

主要風險是如果會話標識符永不過期,它將有效地變爲密碼。有權訪問會話標識符的任何人都可以將其脫機記錄下來,然後稍後再使用它登錄到應用程序。例如,有人可以從cookie中複製會話令牌並簡單訪問用戶的機器。

對此的緩解是常規旋轉會話標識符。也許你可以有一個AJAX請求每隔10分鐘觸發一次,併爲當前會話獲取一個新的令牌 - 即使是標準會話過期時間(例如10-20分鐘),這足以保持會話存活,在表單提交之前不超時。

暴力強制並不是一個問題:只要會話標識符有足夠的熵,那麼這個強制性暴力的風險就很小。 OWASP guidance here on selecting a strong method for session identifier generation

性能方面比安全方面更多的是,如果您將對象存儲在每個會話的內存中,那麼最終內存將隨着會話數量的增加而填充。

長會話的另一個風險是任何CSRF或XSS漏洞都有很長的暴露時間。如果用戶訪問以您的應用爲目標的惡意網站,則會話超時會減輕任何攻擊,因爲用戶不會被認證。即使持續登錄,如果您的網站已被充分鎖定(例如,如果您的網站已被充分鎖定(例如,您的網站已被鎖定)它僅允許具有CSRF保護本身的請求爲訪問令牌交換刷新令牌)。

例如,如果有一個CSRF漏洞:

[User] --> [Attacker's Site]       --> [Your site] 

Browser --> Malicious Page builds form for your site --> Submits form via AJAX 

隨着無盡的會話超時,如果用戶曾經用自己的瀏覽器訪問您的網站的這種攻擊會成功。

但是,如果您有兩個會話令牌:刷新令牌和訪問令牌,並且您需要訪問令牌來提交表單,則會阻止該攻擊。由於訪問令牌只能通過同一站點請求進行檢索,因此請確保該請求的處理程序得到充分的保護以防止CSRF,這可以緩解可能存在於您的站點上的其他漏洞。

因此,如果您必須使會話無限,請使用必須交換的不同令牌,以便與您的網站進行身份驗證。 請參閱this post瞭解如何實現「記住我」功能(即我們的刷新令牌)。缺點是您必須實施刷新令牌來自己訪問令牌邏輯,並要求用戶必須使用訪問令牌(可使用帶JavaScript的客戶端邏輯實現)重新發送任何請求。

+0

你在混合一些東西:[X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options)是爲了防止點擊劫持;相同的來源政策已經適用於框架。 – Gumbo

+0

道歉,如果我沒有讓自己清楚。是的,這就是這兩件事。但區別在於,如果瀏覽器啓用了第三方Cookie,則瀏覽器可以在iframe中讀取新的cookie,但由於SOP,它不能在XHR中讀取。 – SilverlightFox

+0

SOP以相同的方式適用於幀。文檔如何能夠從不同來源的框架文檔中讀取cookie? – Gumbo

2

無盡的會話本質上並不比會話實現的安全性低,但它確實使攻擊者有更多的時間利用。例如,由於會話劫持變得容易一些,因爲攻擊者擁有無限的時間。它也會允許強制會話,但是由於生成的會話令牌足夠複雜,所以這也不應該成爲問題。

基本上,它可以/會使現有的漏洞更易於利用,但不會削弱實施本身。

2

會話超時的主要原因是能夠刪除與會話相關的任何服務器端存儲的數據。否則,您的會話存儲將只會一直增長,您會永遠不會能夠在某個時刻刪除任何存儲的數據。

當然,會話持續時間越長,攻擊者就越有可能猜出會話的ID並可能劫持它。但是,這可以通過現在和當時更改會話的ID輕鬆緩解。