4個常用的HTTP安全頭部
它曾是世界性圖書館夢的開始,現在它是全球知識的聚集地,它是目前最流行的,人們將應用都部署之上的全球資訊網。
它是敏捷的代表,它不是單一的實體,它由客戶端和服務端組成,它的功能在不斷地強大,它還有標準。
雖然越來越多的解決方案非常適用於發現什麼可行,什麼不可行,但它幾乎沒有一致性,沒有易於應用的程式設計模型。俗話說的好:事情越簡單,越安全。簡單的事物很難有像XSS,CSRF或點選挾持的漏洞。
由於HTTP是一個可擴充套件的協議,各瀏覽器廠商都率先推出了有效的頭部,來阻止漏洞利用或提高利用漏洞的難度。瞭解它們是什麼,掌握如何應用,可以提高系統的安全性。
1.Content-Security-Policy
它怎麼就那麼好?
怎麼才能儘可能不遭受XSS攻擊呢?如果有人在你的伺服器上寫了如下程式碼瀏覽器可能不去解析?<script>alert(1);</script>
,
下面是內容安全規範中的說明。
新增內容安全規範頭部並賦以適當的值,可以限制下面屬性的來源:
script-src: JavaScript code (biggest reason to use this header) connect-src: XMLHttpRequest, WebSockets, and EventSource. font-src: fonts frame-src: frame ulrs img-src: images media-src: audio & video object-src: Flash (and other plugins) style-src: CSS
需要特別指定的:
Content-Security-Policy: script-src 'self' https://apis.google.com
這就意味著指令碼檔案只能來自當前檔案或apis.google.com(谷歌的JavaScript CDN)
另一個有用的特性就是你可以自動應用沙盒模式 於整個站點。如果你想試一試效果,你可以用“Content-Security-Policy-Report-Only”頭部執行一下,讓瀏覽器返回一個你選的URL。推薦閱讀一下HTML5Rocks上的一篇CSP的介紹。
有什麼收穫?
遺憾的是IE還是隻支援沙盒模式,並且用的是“X”字首。安安卓它支援最新的4.4版。
當然,它也不是萬能的,如果你動態的產生一個JavaScript,黑客還是能把惡意JS植入你的伺服器中。包含它不會產生危害,在Chrome、 Firefox 和 iOS都能保護使用者。
支援哪些瀏覽器?
在哪還能學到更多它的知識呢?
HTML5Rocks有不錯的關於它的介紹。W3C規範也是個不錯的選擇。
2. X-Frame-Options
它有什麼好的呢?
它能阻止點選挾持攻擊,只需一句:
X-Frame-Options: DENY
這可使瀏覽器拒絕請求該頁的資料。 它的值還有“SAMEORIGIN”,可允許同一源的資料。以及“ALLOW FROM http://url-here.example.com”,它可設定源(IE不支援)。
有什麼收穫?
一些廠商不支援這個頭部,它可能會被整合到Content-Security-Policy 1.1。但到目前,沒人給出足夠的理由說不能使用它。
哪些瀏覽器支援?
IE | Firefox | Chrome | iOS Safari | Android Browser |
8+ | 3.6.9+ | 4.1.249+ | ? | ? |
(資料來源 Mozilla Developer Network)
在哪還能學到更多它的知識呢?
沒有多少要學,想了解更多,可訪問Mozilla Developer Network 上關於此問題的文章。Coding Horror 上也有比較不錯的文章。
3. X-Content-Type-Options
它有什麼好的呢?
讓使用者上傳檔案具有危險性,服務上傳的檔案危險更大,而且很難獲得許可權。
瀏覽器進行二次猜測服務的Content-Type並不容易,即使內容是通過MIME嗅探獲取的。
X-Content-Type-Options頭允許你更有效的告知瀏覽器你知道你在做什麼,當它的值為“nosniff”是才表明Content-Type是正確的。
GitHub上應用了這一頭部,你也可以試試。
有什麼收穫?
雖然這取決於你使用者,他們佔你正保護的訪客的65%,但這個頭部只在IE和Chrome中有用。
哪些瀏覽器支援?
IE | Firefox | Chrome | iOS Safari | Android Browser |
---|---|---|---|---|
8+ | - (bug 471020) | 1+ | - | - |
在哪還能學到更多它的知識呢?
FOX IT上有一篇關於MIME嗅探的優秀文章: MIME 嗅探: 特性還是漏洞? IT Security Stackexchange上也有個專題:X-Content-Type-Options真能防止內容嗅探攻擊嗎?
4. Strict-Transport-Security
它有什麼好的呢?
我的線上銀行使用的是HTTPS來保證真實性(我確實連線到了自己的銀行)及安全性(傳輸過程進行加密)的。然而,這還是有問題的…
當我在位址列中輸入”onlinebanking.example.com”時,預設使用的是簡單的HTTP。只有當伺服器重定向到使用者時,才使用能提供安全的HTTPS(理論上並不安全,但實際上很好用)。偏巧的是重定向的過程會給黑客提供中間人攻擊。為了解決這一問題,Strict-Transport-Security頭部應運而生。
HTTP的Strict-Transport-Security(HSTS)頭部強制瀏覽器使用HTTPS在指定的時候。比如說,如果你進入 https://hsts.example.com,它會返回這樣的頭部:
Strict-Transport-Security: max-age=31536000; includeSubDomains
即使敲入http://hsts.example.com,瀏覽器也會自動變成https://hsts.example.com. 只要HSTS頭部一直有效,瀏覽器就會預設這麼做。在上例的情況下,從傳送頭部到得到響應,有效性可保持1年。所以,如果我2013年1月1日訪問了某網站,知道2014年1月1日,瀏覽器都會使用HTTPS。但如果我2013年12月31日又訪問了一次,那有效期也會變成2014年12月31日。
有什麼收穫?
目前它僅適用於Chrome和Firefox,IE使用者依然存在此漏洞。然而它已經成為了IETF的標準,所以說接下IE應該儘快地也使用Strict-Transport-Security頭部。
當然如果使用了HTTPS,就可不必使用此頭部了,所以說為什麼不用HTTPS呢?切記HTTPS不僅能保證你的內容被加密、不被攔截,還能提供真實性。向使用者承諾內容的確來自你。
使用HTTPS還存在著不同的爭論,事實上,部落格和這個頭部都不是基於HTTPS的,所以爭論還會持續很久。
哪些瀏覽器支援?
在哪還能學到更多它的知識呢?
Mozilla Developer Network上有一篇不錯的文章:HTTP的 Strict Transport Security頭部
如果你正在進行Symfony2或Drupal開發
瞭解更多 Symfony2可以看Nelmio安全包,而Drupal 在安全元件模組有詳細說明。閱讀它們可以使你更瞭解上述介紹的頭部。
殤之館: X-Requested-With
預設情況下jQuery 傳送X-Requested-With頭。它認為這個頭部可以預防偽造跨站請求。然而這個頭部不會產生請求,一個使用者會話可由第三方發起,比如在瀏覽器中XMLHttpRequest就可以自定義頭部。
不幸的是,Ruby On Rails 的Ruby框架和Django Python框架的快速建立,雖然這能成為很好的防禦手段,但它可以不完全依賴於像Java或Adobe Flash第三方外掛了。
總結
使用以上HTTP頭部可幫你快速容易地預防XSS攻擊、點選挾持攻擊、MIME嗅探和中間人攻擊。如果目前還沒使用,通過介紹給你,你可以在你的應用或伺服器上使用。
請確保使用者的安全性。
原文連結: Boy Baukema 翻譯: 伯樂線上 - smilesisi
相關文章
- HTTP與快取相關的頭部HTTP快取
- http頭部如何對快取的控制HTTP快取
- 使用curl抓取網頁遇到HTTP跳轉時得到多個HTTP頭部的問題網頁HTTP
- [譯] HTTP 快取頭部 - 完全指南HTTP快取
- 網頁抓取五種常用的HTTP標頭網頁HTTP
- HTTP常用請求頭大揭祕HTTP
- 關於常用的http請求頭以及響應頭詳解HTTP
- 安全相關的 HTTP 響應頭總結HTTP
- HTTP訊息中header頭部資訊的講解HTTPHeader
- HTTP/2 頭部壓縮技術介紹HTTP
- PHP 常用的header頭部定義彙總PHPHeader
- PHP常用的header頭部定義彙總PHPHeader
- 一些安全相關的HTTP響應頭HTTP
- 網頁快取相關的HTTP頭部資訊詳解網頁快取HTTP
- 解密CSRF、CORS和HTTP安全標頭 - vnaik解密CORSHTTPAI
- 從頭寫個http client(java)HTTPclientJava
- php常用header頭部定義彙總PHPHeader
- useHeadSafe:安全生成HTML頭部元素HTML
- http協議中比較重要的幾個頭HTTP協議
- HTTP 請求響應頭部欄位裡 ETAG 的用法舉例HTTP
- HTTP協議頭部與Keep-Alive模式詳解HTTP協議Keep-Alive模式
- HTTP協議---HTTP請求中的常用請求欄位和HTTP的響應狀態碼及響應頭HTTP協議
- http請求頭個欄位解釋HTTP
- 製作遊戲人物頭部的21個小技巧遊戲
- 一個簡單的爬蟲 頭部構造爬蟲
- 《安全測試常用的幾個工具》
- 我常用的4個備份工具
- HTTP 請求頭部欄位中 connection - keep-alive 的含義HTTPKeep-Alive
- TCP頭部TCP
- TopThink頁面頭部HTML的loginInfo內部多一個 li 標籤HTML
- 使用apache的HttpClient進行http通訊,隱藏的HTTP請求頭部欄位是如何自動被新增的ApacheHTTPclient
- 跨域http頭跨域HTTP
- http請求頭HTTP
- HTML-一個網頁的頭部的大概框架(完善ing)HTML網頁框架
- http請求頭與響應頭的應用HTTP
- 常用的HTTP狀態碼HTTP
- HTTP請求頭與響應頭HTTP
- HTTP 頭部欄位 Cache Control max-age = 0 和 no-cache 的區別HTTP