天天看點

應用安全系列之二十:HTTP協定安全

本系列文章主旨在于介紹一些漏洞類型産生的基本原理,探索最基礎的解決問題的措施。

HTTP協定是一種無狀态的協定,為了能夠保持會話和使用的友善,引入了Cookie,這帶來使用上的友善的同時,也引入的安全隐患,為了消除或者減輕一些安全隐患,HTTP提供了一些Header或者Header的屬性用于提高安全,本章節主要是介紹一些常用的協定頭以及屬性的作用,以及如何正确使用。

HTTPonly

        HTTPonly 使用于保護Cookie的屬性,如果将Cookie的HTTPOnly屬性設為true,就可以組織Javascript讀取Cookie。

Secure

        Secure是用于保護Cookie的另外一個屬性,保證Cookie隻能被随着HTTPS協定的消息一起發送,而不會随着HTTP協定發送,保證Cookie在傳輸過程中的安全。

SameSite

        SameSite是新添加的一個屬性,主要是用于預防CSRF,有3個取值None,Strict和Lax。

屬性 取值 說明
SameSite Strict Cookie隻會被同一站點背景的請求發送
Lax Cookie會被同一站點的請求發送,也會跨站頂級跳(top-level navigations)轉請求被發送。
None Cookie會随着第三方站點的發送的本站點的請求發送

X-Frame-Option

        HTTP 響應報頭可以被用來訓示一個浏覽器是否應該被允許嵌入在一個以顯示頁面的标簽裡顯示時, 例如,<frame>,<iframe>或<object>。通過確定其内容未嵌入其他網站,網站可以使用此功能來避免 點選劫持 攻擊。X-Frame-Options 有三個值如下:

屬性 取值 說明
X-Frame-Options  DENY 表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許。
SAMEORIGIN 表示該頁面可以在相同域名頁面的 frame 中展示。
ALLOW-FROM uri 表示該頁面可以在指定來源的 frame 中展示。

Content-Security-Policy (CSP) 

        配置内容安全政策涉及到添加 Content-Security-Policy  HTTP頭部到一個頁面,并配置相應的值,以控制使用者代理(浏覽器等)可以為該頁面擷取哪些資源,可以設定頁面圖檔、媒體資料、腳本的資料來源。内容安全政策   (CSP) 是用于削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和資料注入攻擊等,主要是協助網站預防内容被污染。例如:以下設定隻允許加載本站點的資源:

Content-Security-Policy: default-src 'self'
           

 還可以通過img-src、media-src以及script-src制定具體某種資源的來源:

Content-Security-Policy: default-src 'self'; img-src 'self'; media-src 'self'; script-src 'self'
           

 在每一個資源的後面可以指定信任的域名,來加載某個網站的資源。

通過這個設定,就可以避免網站在遭受XSS攻擊時,頁面被篡改,

Google的設定示例如下:

應用安全系列之二十:HTTP協定安全

HSTS=HTTP Strict Transport Security

     HTTP Strict Transport Security(通常簡稱為HSTS)它的功能就是控制浏覽器隻能通過HTTPS通路目前資源,而不是HTTP,這樣可以防止網絡嗅探攻擊。主要用法如下:

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload
           

在設定max-age時,建議設定為1年,如下:

Strict-Transport-Security: max-age=31536000; includeSubDomains
           

X-XSS-Protection

       X-XSS-Protection可在檢測到跨站點腳本(XSS)攻擊時阻止頁面加載,通常檢測到,浏覽器都會彈出警告框提示可能存在XSS攻擊,目前,Chrome、IE和Safari支援,其他的浏覽器還不支援。設定的示例如下:

X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>
           

 0: 禁止XSS過濾.

1  啟用 XSS 過濾(通常在浏覽器中預設):如果檢測到跨站點腳本攻擊,浏覽器将清理頁面(删除不安全的部分)。也可以通過一項兩個選項進一步設定檢測到XSS時的行為:

          mode = block 檢測到XSS時,浏覽器将阻止頁面的顯示,而不是僅僅過濾頁面中的導緻XSS的部分内容。

          report = <reporting-URI>(僅Chromium支援), 檢測到XSS時,浏覽器将清理頁面并報告違規行為,使用 CSP report-uri指令的功能發送報告。

CORS (Cross-Origin Resource Sharing,跨域資源共享)

       由于受到同源政策的影響,站點被不允許從其它站點加載資源,但是,在某些情況下,又需要從某些站點加載資源。CORS就是用于控制跨站通路的。CORS的Header如下:

屬性 Header 說明
CORS Access-Control-Allow-Origin 訓示請求的資源能共享給哪些域。
Access-Control-Allow-Credentials 訓示當請求的憑證标記為 true 時,是否響應該請求。
Access-Control-Allow-Headers 用在對預請求的響應中,訓示實際的請求中可以使用哪些 HTTP 頭。
Access-Control-Allow-Methods 指定對預請求的響應中,哪些 HTTP 方法允許通路請求的資源。
Access-Control-Expose-Headers 訓示哪些 HTTP 頭的名稱能在響應中列出。
Access-Control-Max-Age 訓示預請求的結果能被緩存多久。
Access-Control-Request-Headers 用于發起一個預請求,告知伺服器正式請求會使用那些 HTTP 頭。
Access-Control-Request-Method 用于發起一個預請求,告知伺服器正式請求會使用哪一種 HTTP 請求方法。

         設定的示例如下:

Access-Control-Allow-Origin: https://www.example.com
Access-Control-Allow-Methods: POST, GET, HEAD
           

       常用的是Access-Control-Allow-Origin,強烈建議不要設為為*。

X-Content-Type-Options

      微軟在 IE 8 中引入了這個頭檔案,作為網站管理者阻止正在發生的内容嗅探的一種方式,并且可以将不可執行的 MIME 類型轉換為可執行的 MIME 類型,一般建議禁用此功能。設定的值如下:

X-Content-Type-Options: nosniff
           

Cache-Control

    可以通過設定Cache-Control頭,防止敏感資訊被浏覽器緩存。

屬性 取值 說明
Cache-Control no-store 告訴浏覽器不緩存任何内容,每次都需要去伺服器通路
no-cache 英文解釋是:A cache will send the request to the origin server for validation before releasing a cached copy. 關于no-cache的實作不同的浏覽器可能會不同,FireFox會依然緩存,而IE、Chrome會不緩存,是以一般都選擇同時設定no-store和no-cache。
max-age 緩存的内容将在多少秒後失效
private 用戶端可以緩存(預設)
public 用戶端和代理伺服器都可緩存
must-revalidate 浏覽器在使用本地資源之前必須檢查是否過期

關于Cache-Control的設定,可以參考Google的設定如下:

應用安全系列之二十:HTTP協定安全

關于禁止緩存,很多站點都會設定Pragma:no-cache,跟Cache-Control: no-cache相同。隻不過Pragma: no-cache相容http 1.0 ,Cache-Control: no-cache是http 1.1提供的。是以,Pragma: no-cache可以應用到http 1.0 和http 1.1,而Cache-Control: no-cache隻能應用于http 1.1。 可能Pragma在将來某個某個時間點被廢棄。

如果有不妥之處,希望可以留言指出。謝謝!

參考:

https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html

https://hostway.com/creating-top-level-navigation/#:~:text=Top%2Dlevel%20navigation%20is%20generally,to%20www.adaptivepath.com. 

https://medium.com/@arcagarwal/same-site-changes-in-chrome-1c86973454f9

https://developer.mozilla.org/zh-CN/docs/web/http/csp

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Strict-Transport-Security

https://cloud.tencent.com/developer/section/1190033

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching

https://www.php.cn/manual/view/35652.html

繼續閱讀