前言
同事詢問,系統升級到 .NET 4.x 後,使用 IE 原本列印畫面時,系統好好的。但升級後,按下列印或是預覽列印後,卻會造成使用者被登出。
研究
透過 Fiddler 錄相關的 Request 發現,在出現 Print 視窗時,系統還會發一個 Request 給 Server,但這個 Request 卻沒有帶任何的 Cookies,所以導致 Server 端認為不是已登入使用者,所以就被導到登入頁。
感覺蠻奇怪的,開啟列印視窗時,居然發一個 Request ,原本是建議同事詢找一下,為什麼 windows.open 時,都會自動去發那個 Request 。
隔天,同事 Ian 有找到 IE or Edge Print dialog box send request to server without session (because SameSite=Lax on session cookie),然後在 web.config 的 forms tag 中,多加入 cookieSameSite=”None” ,預設是 Lax
SameSite 是一種IETF草稿標準,旨在針對跨網站偽造要求(CSRF)攻擊提供一些保護。
表單驗證和會話狀態 cookie 的預設 SameSite 值已從 None 變更為 Lax。
依建議,如果要跟原本的行為一致就是設定回 None 。
1 | <configuration> |
以上的暫時解,大家可依目前缺那個 Cookie 而去設定它,而且頁面也要實作 CSRF 的防護哦!
可以 check 的是,為什麼恕是要呼叫 /id 的那個 Request 。
註:
以上感謝 Jue, Evans, Ian 等同事的分享
參考資料
print of iframe reloads resources and doesnt send sameSite cookie after kb4511872 security update