[security] X-XSS-Protection

X-XSS-Protection 是一個在早期瀏覽器並不支援 CSP 時,IE 所開發出預防 XSS 攻擊的 header,後來 chrome 與 sarfari 等瀏覽器也開始支援。(不過目前瀏覽器幾乎都支援 CSP 1.0 了,根本上還是設定 CSP (Content-Seciruty-Policy) 較安全。 畢竟這個 header 偵測 XSS 攻擊有一套過濾的方法 (IE 預設開啟),僅有限程度的防範,並不完全可以防止 XSS。 目前支援度為下圖,有部分瀏覽器(如:firefox)並不支援。 這邊簡單介紹用法,通常我們會在支援早期(如:ie8)瀏覽器時設置,其餘則設定 CSP 會更有效的防止 XSS 開啟 XSS filter 過濾,當偵測到 XSS ,阻擋頁面載入。 <?php header(“X-XSS-Protection: 1; mode=block”); ?> 開啟 XSS filter 過濾,當偵測到 XSS ,過濾此資源載入。 <?php header(“X-XSS-Protection: 1;”); ?> 關閉 XSS filter 過濾 […]

Continue reading


[security] CSP level2  對於 inline 程式碼的 hash 與 nonce 處理方法

之前介紹過 CSP 1.0 時,有提到目前部分瀏覽器有支援 CSP 2.0 支援度如下圖: 在 CSP level2 新增了部分的 directives 及屬性(如 web worker 針對 外部資源載入的 child-src) ,更多關於 CSP level2 的詳細內容. 這篇僅介紹 CSP level2 針對 inline 程式碼所規範的 hash 與 nonce,讓 inline 程式碼能較安全且彈性的執行. 我們先來看一個普通的 CSP demo 頁面 header(“Content-Security-Policy: script-src *;”); print “<h1>CSP demo</h1> <script src=’https://code.jquery.com/jquery-3.2.1.slim.min.js’></script> <script>     var my_script = document.createElement(‘script’);     my_script.setAttribute(‘src’,’https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js’);     document.head.appendChild(my_script); </script>”; 實際執行的畫面: 可以看到設置了 CSP script-src * ,預設還是會擋掉 inline script ,在錯誤的訊息中,透露出可以設定 unsafe-inline, hash 及 nonce 來解決這個問題. […]

Continue reading


[security] Content-Security-Policy 增加網頁安全的 http header,防禦 XSS 跨站攻擊 script

Content-Security-Policy 為瀏覽器目前所實作的一個標準, 主要是用在防禦 XSS 攻擊的標準.((當然不可能完全防禦… 簡單解釋:利用 http header 去定義在 html 限制載入的跨站 script (例如 img-src, script-src…等可以載入外部資源的標籤). Content-Security-Policy 普及的標準為 1.0 版本 Content-Security-Policy level2 (增加了進階的 inline script 執行限制,child-src…等等,請參考MDN介紹) Content-Security-Policy level3: 撰寫本文時還在草案中… 以下將 Content-Security-Policy 簡稱 CSP 接下來簡單介紹 CSP 1.0 的幾個常見用法 比如我們可以新增一個 test.php 檔案加上標頭(這邊是為了 demo 方便,通常是會設在 webserver 上) header(“Content-Security-Policy: default-src ‘self'”); print “<h1>CSP demo</h1> <script src=’https://code.jquery.com/jquery-3.2.1.slim.min.js’></script> <iframe src=’https://www.w3schools.com’></iframe> <img src=’https://www.w3schools.com/tags/smiley.gif’> <script>alert(‘test’);</script>”; 試著執行看看: 打開 F12 […]

Continue reading


[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 版本 […]

Continue reading


[security] http(s) header X-Content-Type-Options,避免瀏覽器執行不符 Content-type 的操作

在瀏覽器行為中,預設會對 Content-type 不明或有誤的檔案做 sniffing 演算法,探測此檔案的類型並已相對應的方式執行。 然而,這可能導致惡意使用者注入程式碼至檔案中,如: 在圖片中嵌入惡意程式碼,瀏覽器可能偵測為 js 程式碼腳本而執行。 在大多數瀏覽器(除了 sarfari)有支援關閉 sniffing 檔案探測的 header: X-Content-Type-Options 我們可以透過在 apache 設定檔去設定此 header,當瀏覽器收到 X-Content-Type-Options: nosniff; 就會依照 Content-type 去檢查檔案的 MIME type 是否符合,才會下載並執行此檔案。 設定步驟: 編輯 apache 的 site-available 設定,加上 X-Content-Type-Options vim /etc/apache2/conf-available/security.confHeader always set X-Content-Type-Options nosniff 重新開啟 apache2,就會重新載入新設定 sudo service apache2 restart 這樣可以避免客戶端執行不正常的 Content-type 類型檔案! 參考資料: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options

Continue reading