[Easy] 📄 Client Side Security
1. Can you explain what CSP (Content Security Policy) is?
你能解釋什麼是 CSP (Content Security Policy) 嗎?
原則上,CSP 是一種增強網頁安全性的機制,可以透過設定 HTTP header,來限制網頁內容能夠載入的資料來源(白名單),以防止惡意的攻擊者透過注入惡意的 script 來竊取使用者的資料。
從前端的角度,為了防止 XSS (Cross-site scripting) 攻擊,多會採用現代框架來做開發,主要在於他們提供了基本的保護機制,例如 React 的 JSX 會自動將進行 HTML 轉義,Vue 則是透過 {{ data }} 方式來綁定資料,同時進行自動轉義 HTML 標籤。
雖然前端在這塊能做的不多,但還是有些細部優化可以處理,例如:
- 如果需要輸入內容的表單,可以透過驗證特殊字元來避免攻擊(但其實很難設想所有情境),所以多採用限制長度來控制 client 端輸入的內容,或是限制輸入的類型。
- 若需要引用外部連結時,迴避 http url 採用 https url。
- 靜態頁面的網站,可以透過設定 meta tag 來限制,如下
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; img-src https://*; child-src 'none';"
/>
default-src 'self'