前端三十|29. [WEB] 網站常見的資安問題有哪些?

Schaos
Schaos’s Blog
Published in
9 min readOct 14, 2019

--

經過一番努力,精心打造的網站眼看就要部屬到正式環境了;但在網站對外之前,你有先仔細思考過你的網站安不安全嗎?在本系列文前面的旅程中,我們討論了許多語言特性、效能優化、技術選型,但如果網站的安全性不足,無法正確保護網站使用者的資料、甚至成為惡意程式的寄生處,那前面堆砌了再多美好也都成枉然。今天就讓我們一起來看看網站常見的資安問題吧。

本系列文已經重新編校彙整編輯成冊,並正式出版囉!

前端三十:從 HTML 到瀏覽器渲染的前端開發者必備心法好評販售中!

喜歡我文章內容的讀者們,歡迎您前往購買支持

SQL Injection

在眾多安全性漏洞中,SQL Injection 絕對是最嚴重,也最好處理的一種安全漏洞。發生在對資料庫執行查詢句時,如果將惡意使用者給予的參數直接使用組合在查詢句上,便有機會發生。

舉個例子,假設原本某網站登入驗證的查詢句長這樣:

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"

而惡意使用者輸入的參數為:

userName = "1' OR '1'='1";
passWord = "1' OR '1'='1";

由於這邊直接將參數與查詢句做字串連接,合併後,SQL 便成為了這樣:

strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
// 相當於
strSQL = "SELECT * FROM users;"

這樣一來,就形同沒有帳號密碼就可以登入,甚至可以取得整個資料庫的資料結構(SELECT * FROM sys.tables)、任意更改、查詢資料,整個網站的機敏資料就全部外洩了。

解決方法也很簡單,只要透過參數化查詢來避免直接將參數與查詢句組合,並給予適當的輸入檢查、插入跳脫字元、嚴格設定應用程式權限,就能夠有效避免 SQL Injection 囉。

XSS

--

--