[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