[security] Set-Cookie: HttpOnly ,避免 XSS 攻擊時存取你的 session id

當今天網站不小心被發現有 XSS 漏洞時,攻擊者很可能會透過 javascript 盜取你的 cookie 中的 session id,來盜取帳號。

在 http(s) header 中其中有一個 header 為 Set-Cookie,將 Set-Cookie 設為 httpOnly(javascript 無法存取cookie)或 secure (http 連線無法存取 cookie)

並且各瀏覽器都支援此 header

未命名

  • 我們可以簡單的透過 php_ini 設定,Set-Cookie: HttpOnly
    vim /etc/php5/apache2/php.in

    session.cookie_httponly = true

    但這樣設定僅會設定到 Set-Cookie: HttpOnly(僅阻止 javascript 直接存取 cookie)

  • 透過 apache2 設定 header (apahce 版本資訊, 可透過指令 sudo apache2 -v 得知)
    vim /etc/apache2/conf-available/security.conf
    若是 apache 版本 >=2.2.4

    Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

    若是 apache 版本 < 2.2.4

    Header set Set-Cookie HttpOnly;Secure

    sudo service apache2 restart    # 重啟 apache 載入設定

    這樣就可以避免 javascript 與不安全的 http 連線存取 cookie

設定完後,可以利用這個線上工具檢查是否有正確設定到 Set-Cookie 欄位

雖說這個 header 可以某種程度的保護使用者免於程式碼存取 cookie,但 XSS 仍可以利用使用者身分做一些特定權限操作。

最根本還是要避免 XSS 的攻擊漏洞阿~

 

參考資料:

http://blog.miniasp.com/post/2009/11/26/Using-HttpOnly-flag-to-avoid-XSS-attack.aspx

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

https://doc.nuxeo.com/nxdoc/http-and-https-reverse-proxy-configuration/

Leave a Reply