網站資安問題有哪些?遇上SQL Injection、XSS、CSRF該如何解決?

網站資安問題有哪些?
3個常見的資安狀況學起來不怕被入侵!

網站架站是一件費心耗神的事,從使用者需求、設計到寫程式。花了很大心力做好的網站,你絕對不希望讓他白白葬送在駭客的攻擊中!這篇文章將會介紹你三個網站資安被攻擊時會遇到的狀況以及解決方法。

 

1.SQL Injection

難搞指數:⭐

SQL Injection可說是駭客的入門招,但卻會造成網站資安很嚴重的後果。幸好SQL Injection算是好處理的狀況,這邊我們就來談談SQL Injection實際的運作方式以及如何預防。

SQL Injection是指網站上有提供使用者對資料庫執行查詢時,駭客將特定參數直接使用在查詢句上。

實際案例來說,網站提供登入功能就是一種執行查詢,像是這樣:

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

而駭客如果在

使用者名稱(帳號)輸入:“1′ OR ‘1’=’1”;

密碼輸出:“1′ OR ‘1’=’1”;

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

login = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
// 對於資料庫,他得到的就是
login = "SELECT * FROM users;"

但資料庫依照這段程式進行,就等於他沒有帳號密碼也可以登入,也可以取得整個資料庫的資料結構(SELECT * FROM sys.tables),那你整個網站的機敏資料就全部外洩了。

那我們應該如何解決呢?

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

 

2.XSS(Cross-site scripting)

難搞指數:⭐⭐⭐

有時也叫做 JavaScript Injection,近期的網站很常出現的狀況。如果你的網站將使用者輸入的內容直接放到網站內容時,就有可能被其他使用者植入程式碼,像是論壇、討論區等。假設駭客寫入 <script>,你也沒做任何篩選或轉換,網站直接將使用者輸入的字串當成頁面內容的話,就有可能遭到 XSS。

我們還可以將這個行為細分為:

1.將惡意程式寫入 DB,等資料被讀取出來時執行的「儲存型 XSS」

2.將使用者輸入的內容直接帶回頁面上的「反射型 XSS」

3.利用 DOM 的特性執行惡意程式的「DOM-based 型 XSS」

那我們應該如何解決呢?

前面有說,當你提供輸入介面給使用者,他們才有機會埋入XSS到你的網站內,所以在他們輸入的內容下做工夫就好了,像是在資料輸入時做字元轉換。

 

3.CSRF(Cross Site Request Forgery)

難搞指數:⭐⭐⭐⭐

利用 Cookie 及 Session 認證機制的攻擊手法;熟悉網路的人應該知道 Session 認證的是瀏覽器,透過網頁 DOM 元素可以跨域的機制,對已經得到認證的網站發出請求,就可以假冒使用者,取得不該取得的機敏資料,這種情況最常發生在交易上。

舉例來說,如果有一家銀行,他的轉帳 API URL 是這樣:

http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName

然後駭客在網頁上埋了一段程式碼 <img />:

<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">

然後有天使用者瀏覽到駭客設計的假網頁,<img/> 便會自動送出這個請求,如果使用者在銀行的 Session 尚未過期,這個請求就會被銀行採納,直接進行轉帳的動作。

那我們應該如何解決呢?

  • Check Referer:除非是允許的網站,才讓API的功能被執行。這部分可以讓伺服器去檢查 Header 中的 Referer 值,也就是檢查請求的來源。
  • CSRF Token:在 Cookie 及請求的欄位中加上 csrftoken,並檢查是否為同一個數值,如果請求來源是自家網站,驗證就會通過。
 

 

網站資安 結論

一個網站有非常多的細節要考慮,這也就是為什麼一個資安專家的要價如此的貴,如果你沒做好資安,花再多錢蓋網站也只是白白送人家。之後筆者還會再介紹更多網站資安基本知識,如果你真的不幸中毒或是被入侵,也可以諮詢資安防護家,他們提供一個網域一次免費檢測的機會,如果有需要歡迎 點我預約

 


 

更多資安相關資訊: