它曾是世界性圖書館夢的開始,如今它是全球知識的彙集地,它是目前最流行的,人們將應用都部署之上的萬維網。php
它是敏捷的表明,它不是單一的實體,它由客戶端和服務端組成,它的功能在不斷地強大,它還有標準。html
雖然愈來愈多的解決方案很是適用於發現什麼可行,什麼不可行,但它幾乎沒有一致性,沒有易於應用的編程模型。俗話說的好:事情越簡單,越安全。簡單的事物很難有像XSS,CSRF或點擊挾持的漏洞。html5
因爲HTTP是一個可擴展的協議,各瀏覽器廠商都率先推出了有效的頭部,來阻止漏洞利用或提升利用漏洞的難度。瞭解它們是什麼,掌握如何應用,能夠提升系統的安全性。git
怎麼才能儘量不遭受XSS攻擊呢?若是有人在你的服務器上寫了以下代碼瀏覽器可能不去解析?<script>alert(1);</script>,github
下面是內容安全規範中的說明。web
添加內容安全規範頭部並賦以適當的值,能夠限制下面屬性的來源:chrome
須要特別指定的:django
這就意味着腳本文件只能來自當前文件或apis.google.com(谷歌的JavaScript CDN)編程
另外一個有用的特性就是你能夠自動應用 沙盒模式 於整個站點。若是你想試一試效果,你能夠用「Content-Security-Policy-Report-Only」頭部運行一下,讓瀏覽器返回一個你選的URL。推薦閱讀一下HTML5Rocks上的一篇CSP的介紹。segmentfault
遺憾的是IE仍是隻支持沙盒模式,而且用的是「X」前綴。安安卓它支持最新的4.4版。
固然,它也不是萬能的,若是你動態的產生一個JavaScript,黑客仍是能把惡意JS植入你的服務器中。包含它不會產生危害,在Chrome、 Firefox 和 iOS都能保護用戶。
Unnamed QQ Screenshot20140225201216
在哪還能學到更多它的知識呢?
HTML5Rocks 有不錯的關於它的介紹。W3C 規範也是個不錯的選擇。
它能阻止點擊挾持攻擊,只需一句:
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 上也有比較不錯的文章。
讓用戶上傳文件具備危險性,服務上傳的文件危險更大,並且很難得到權限。
瀏覽器進行二次猜想服務的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真能防止內容嗅探攻擊嗎?
個人在線銀行使用的是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能夠看Nelmio安全包,而 Drupal 在安全組件模塊有詳細說明。閱讀它們可使你更瞭解上述介紹的頭部。
默認狀況下jQuery 發送X-Requested-With頭。它認爲這個頭部能夠預防僞造跨站請求。然而這個頭部不會產生請求,一個用戶會話可由第三方發起,好比在瀏覽器中XMLHttpRequest就能夠自定義頭部。
不幸的是,Ruby On Rails 的Ruby框架和Django Python框架的快速建立,雖然這能成爲很好的防護手段,但它能夠不徹底依賴於像Java或Adobe Flash第三方插件了。
使用以上HTTP頭部可幫你快速容易地預防XSS攻擊、點擊挾持攻擊、MIME嗅探和中間人攻擊。若是目前還沒使用,經過介紹給你,你能夠在你的應用或服務器上使用。
請確保用戶的安全性。
原文:4 HTTP SECURITY HEADERS YOU SHOULD ALWAYS BE USING
轉載自: 伯樂在線 - smilesisi