[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] 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