<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    HttpOnly 標志–保護 Cookies 免受 XSS 攻擊

    Andrew2020-08-24 18:03:39

    HttpOnly標志–保護Cookies免受XSS攻擊

    跨站點腳本(XSS)攻擊通常旨在竊取會話Cookie。在這種攻擊中,cookie值由使用JavaScript (document.cookie)的客戶端腳本訪問。但是,在日常使用中,Web應用程序很少需要通過JavaScript訪問cookie。因此,設計了一種防止cookie被盜的方法:一個告訴web瀏覽器只能通過HTTP訪問cookie的標志——HttpOnly標志。

    該的HttpOnly標志不是新的。它最初于2002年在Microsoft Internet Explorer 6 SP1中實現,以防止敏感信息被盜。當前,每個主流瀏覽器都支持HttpOnly cookie。

    HttpOnly如何工作?

    HttpOnly屬性是Set-Cookie HTTP響應頭的一個可選屬性,在HTTP響應中,web服務器將該屬性與web頁面一起發送到web瀏覽器。下面是一個使用Set-Cookie頭設置會話cookie的例子:

    HTTP/2.0 200 OK
    Content-Type: text/html
    Set-Cookie: sessionid=QmFieWxvbiA1

    上面的會話cookie沒有受到保護,可以在XSS攻擊中被盜。但是,如果會話cookie設置如下,則可以防止使用JavaScript對其進行訪問:

    Set-Cookie: sessionid=QmFieWxvbiA1; HttpOnly

    如何設置HttpOnly服務器端?
    所有現代的后端語言和環境都支持設置HttpOnly標志。這是一個如何使用setcookie函數在PHP中執行此操作的示例:

    setcookie("sessionid", "QmFieWxvbiA1", ['httponly' => true]);

    最后一個值(true)表示設置HttpOnly屬性。

    安全Cookie的其他標志
    HttpOnly標志不是您可以用來保護cookie的唯一標志。這里還有兩個有用的方法。

    安全標志
    該安全標志被用于聲明該cookie可能僅使用安全連接來發送(SSL / HTTPS)。如果設置了此cookie,那么如果連接是HTTP,瀏覽器將永遠不會發送該cookie。該標志防止通過中間人攻擊盜竊cookie 。

    請注意,只能在HTTPS連接期間設置此標志。如果是在HTTP連接期間設置的,則瀏覽器將忽略它。

    例:

    Set-Cookie: sessionid=QmFieWxvbiA1; HttpOnly; Secure

    在PHP中設置上述cookie的示例:

    setcookie("sessionid", "QmFieWxvbiA1", ['httponly' => true, 'secure' => true]);

    SameSite標志
    SameSite標志用于聲明web瀏覽器何時應該發送cookie,這取決于訪問者如何與設置cookie的站點交互。此標志用于幫助防止跨站點請求偽造(CSRF)攻擊。

    所述SameSite屬性可具有以下值之一:

    SameSite=Strict:僅當您當前位于為其設置Cookie的網站上時,才發送Cookie。如果您在其他站點上,并且單擊指向設置了cookie的站點的鏈接,則 cookie 不會隨第一個請求一起發送。
    SameSite=Lax:cookie不會被發送給嵌入的內容,但是如果您單擊指向設置了Cookie的網站的鏈接,則會發送該Cookie。僅使用不會更改狀態的安全請求類型(例如GET)發送該請求。
    SameSite=None:即使對于嵌入式內容,也會發送cookie。
    當未設置SameSite屬性時,默認情況下,不同的瀏覽器的行為會有所不同。例如,在2019年,Google Chrome瀏覽器更改了SameSite cookie的默認行為。

    例:

    Set-Cookie: sessionid=QmFieWxvbiA1; HttpOnly; Secure; SameSite=Strict

    在PHP中設置上述cookie的示例:

    setcookie("sessionid", "QmFieWxvbiA1", ['httponly' => true, 'secure' => true, 'samesite'=>'Strict']);

    Cookie標志足以抵御XSS嗎?
    即使cookie標志對于許多攻擊有效,也不能用作跨站點腳本的補救措施。攻擊者可能想出辦法來規避限制。例如,執行跨站點跟蹤(CST)攻擊,甚至竊取受HttpOnly等標志保護的cookie。

    防止跨站點腳本攻擊的唯一有效方法是在應用程序中找到此類漏洞,并從源頭上消除它們。查找此類漏洞的唯一有效方法是執行手動滲透測試和/或使用自動漏洞掃描程序。

    xsscookie
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    if (search && search.length > 1 && search.charAt(0) === '?寫入errcode和errmsg到divCode和divMsg中。其中errcode和errmsg都是我們可控的。只要errcode和errmsg為xss代碼,即可觸發xss攻擊。通過阿里加載js的方式,我們可以改造我們的加載方式如下: 亚洲 欧美 自拍 唯美 另类