在開發網頁應用程式時,安全措施是一個無法迴避的重要主題。攻擊者總是不斷尋找漏洞,一旦安全漏洞被惡意利用,可能導致個人資訊洩露或系統被竄改等嚴重後果。
本文將解釋網頁開發者應該至少了解的代表性攻擊手法及其對策,並提供開發時的最佳實踐。掌握基本的安全知識後,您將能構建出更安全的網頁應用程式。
SQL 注入是一種透過在 SQL 查詢中插入惡意程式碼的攻擊手法,旨在非法操作資料庫。攻擊者可以通過輸入表單或 URL 參數等方式,使不預期的 SQL 語句得以執行。
舉例來說,假設在用戶認證時執行以下 SQL 查詢:
SELECT * FROM users WHERE username='admin' --' AND password = 'password';
在這種情況下,-- 是 SQL 的註解符號,之後的部分將被註解掉。因此,密碼檢查被禁用,即使不知道密碼也可以登入。
為了防止 SQL 注入,以下兩種方法是有效的。
轉義處理
轉義是指對特殊字符進行無害化處理的過程。將在 SQL 語句中具有特殊意義的字符(如單引號或雙引號)轉換為普通字符串來處理。
準備語句
準備語句是一種將 SQL 語句的結構與數據分開處理的方法,是最推薦的對策。這種方法首先準備 SQL 語句模板,然後安全地插入值,因此無需擔心執行惡意程式碼。
跨網站腳本攻擊(XSS)是一種將惡意腳本插入網頁並使其他用戶執行的攻擊手法。允許用戶在表單或 URL 中輸入並執行 JavaScript 的狀態,對於網路服務來說是重大的安全漏洞。
攻擊者在留言板的評論區或個人資料等接收用戶輸入的地方嵌入腳本。當其他用戶瀏覽該頁面時,腳本會在他們的瀏覽器中執行,可能導致竊取 Cookie 資訊或引導至釣魚網站等。
輸入值的轉義與清洗
對用戶輸入進行適當的轉義和清洗是至關重要的。透過轉義,可以將可能被解釋為 HTML 或 JavaScript 的字符顯示為普通文本。
框架的自動轉義功能
主要框架通常會自動進行轉義處理。然而,在實作之前,確認其具體規範是非常重要的。在自動轉義無效的地方或故意使用生 HTML 輸出的功能時,特別需要小心。
Cookie 是存儲在客戶端的小數據片段,用於會話管理和用戶認證。伺服器透過 HTTP 回應發送 Set-Cookie 標頭,客戶端則保存該 Cookie 並在後續請求中將其當作 Cookie 標頭發送。
Cookie 具有幾個增強安全性的屬性。
HttpOnly 屬性
設定 HttpOnly 屬性後,JavaScript 將無法訪問 Cookie。這樣可以大幅減少透過 XSS 攻擊竊取 Cookie 資訊的風險。包含會話 ID 等重要資訊的 Cookie 必須設定此屬性。
Secure 屬性
設定 Secure 屬性後,僅在 HTTPS 連接中傳送 Cookie。因為在 HTTP 傳輸中不會發送,所以可以防止在傳輸路徑上被竊聽。
然而,在本地開發環境中,常常不使用 HTTPS,因此設定 Secure 屬性可能會導致開發時 Cookie 不有效。需要根據生產環境和開發環境切換設定等,進行適當的處理。
內容安全策略 (CSP) 是一種限制網頁能夠加載的資源類型和位置的安全功能。CSP 是防止 XSS 攻擊的非常有效的手段。
CSP 可以透過 HTTP 標頭或 HTML 的 <meta> 標籤進行設定。您可以精細控制從哪些域名加載腳本,是否允許內聯腳本等。
正確設定 CSP 後,即使攻擊者能插入惡意腳本,瀏覽器也會阻止該腳本的執行。這樣,能夠作為多層防禦的一部分提供強力保護。
庫或框架的預設設定及名稱對攻擊者來說容易預測,因此成為安全上的風險。許多開發者直接使用預設設定,攻擊者可以瞄準廣為人知的漏洞或設定進行攻擊。
儘可能地更改以下項目:
這些更改可以減少自動化攻擊工具進行暴力破解攻擊的風險。
詳細的錯誤訊息可能為攻擊者提供系統的內部資訊。例如,若洩露資料庫的表結構、檔案路徑或使用的庫版本等,將成為攻擊的線索。
向用戶顯示一般性錯誤訊息,並將詳細錯誤訊息記錄在伺服器端的日誌中。在生產環境中,設定以不顯示堆疊追蹤或內部錯誤的詳細資料。
另一方面,在開發環境中,為了偵錯需要詳細的錯誤資訊。使用環境變數等切換生產和開發中的設定非常重要。
錯誤日誌應該包含排除故障所需的資訊,但需注意不記錄個人資訊或密碼等機密資料。日誌檔案本身也需以適當的存取權限進行保護,以防權限不足的用戶訪問。
為確保網頁應用程式的安全,請檢查以下要點。
安全的世界不斷進化,新攻擊手法和漏洞每天都在被發現。本文中提到的對策僅為基本措施,不能完全保證安全。
定期跟進安全相關資訊,保持所用的庫和框架為最新狀態是非常重要的。此外,進行安全測試和程式碼審查,持續提高應用程式的安全性。
安全措施不是一次性行動,而是需要持續的努力。牢牢掌握基礎,並持續學習,才能夠開發出更安全的網頁應用程式。
原文出處:https://qiita.com/ktdatascience/items/72ecd89bef963acb9559