Code Injection Attack – SQL Injection

【Code Injection Attack – SQL Injection】

近年來網路攻擊層出不窮,其中駭客最為常用的手法是注入式攻擊,因為這類型攻擊手法簡單,又不需要使用任何軟體或是撰寫複雜的程式碼。
  而注入式攻擊又分為很多不同的種類,分別有「SQL Injection、Cross Site Scripting、CRLF Injection、SMTP Injection、LDAP Injection、Xpath Injection、Host Header Injection」面對這些五花八門的注入式攻擊,程式設計師該怎麼防範呢?這裡小編將以一系列的介紹,帶大家了解不同的Code Injection Attack![1]
  今天為大家介紹的就是【Code Injection】,它蟬聯OWASP TOP 10 2013-2017的冠軍寶座,可見此攻擊造成的傷害性及普遍性極高,而第一個為大家介紹的也是這一類攻擊中的經典-SQL Injection。[2]

【SQL Injection攻擊簡介】
  提到SQL,首先要介紹一下資料庫系統,在許多應用程式架構中,大部分都含有資料庫,用來存放各式各樣的資料。在基礎資料庫中,以結構化查詢語言(SQL Structure Query Language)最為流行。一般程式設計師在存取資料庫時,往往是利用其他語言來組織SQL語言,接著再傳遞給資料庫做執行。正因為資料庫所有的執行皆是遵循SQL語法指令,所以透過此種方式可以很方便地完成各種資料維護工作。但也正因為 SQL 語言無所不能,所以常常淪為駭客攻擊的工具之一。[3]
  SQL injection是應用程式組織SQL語法時疏忽所造成的弱點,惡意使用者透過輸入不正當的SQL語法,並未經驗證就傳給資料庫做執行,導致跳脫原本系統該有的正常程序,變成駭客想要的惡意行為。駭客只要使用SQL指令SELECT、FROM、WHERE,並藉由特殊字元改變指令的邏輯,就能輕易取得資料庫中的資料。以下舉一個網站會員系統的SQL injection例子:
  下方是一段網站正常登入並由php程式語言所撰寫的程式碼,目的是要透過輸入帳號及密碼進行驗證:
$sql=”SELECT * FROM users WHERE ID = ‘$name’ and PW = ‘$password'”
這段程式碼意指php執行SQL語法從users資料表中,取得符合使用者輸入的帳號及密碼進行驗證。但當惡意使用者透過不正當輸入時,就可能造成後端程式執行攻擊行為,如下:
$sql=”SELECT * FROM users WHERE ID = ‘$name’ and PW=”or’A’=’A'”
只要惡意使用者輸入已知帳號,並在密碼填寫處利用特殊字元輸入「’or’A’=’A」,就能使後段密碼驗證的程式邏輯出錯,導致未經驗證的SQL語法被執行,就能讓駭客在不需要知道該帳號真實密碼的情況下進行登入。[4]

【防護方法】
事實上,SQL Injection攻擊很簡單,不過防護的手法也不難。主要是將使用者輸入的欄位做限制,像是對輸入欄位做長度限制、更保險的做法是過濾特殊字元「’ “」。更進階的方法會建議透過對輸入資訊加以編碼處理,從根本解決SQL Injection的問題。
 .
對於Code Injection Attack – SQL Injection的介紹,不曉得大家有沒有對於這項網路攻擊有更詳細的認知了呢!如果你有提供含資料庫的應用程式服務,小編建議你趕快查看是否有針對SQL Injection進行防護了!?除了簡易的防護手段,定期對自家的服務進行資安健檢也是必須的。以上如果有任何建議或問題,歡迎大家私訊三甲科技粉絲團,會有熱心的小編為大家服務。

文章參考:
[1] https://www.acunetix.com/blog/articles/injection-attacks/
[2] https://www.vscan.com.tw/blog/injection-attack/
[3] http://alen1985.pixnet.net/blog/post/27035413-sql-injection-(%E8%B3%87%E6%96%99%E9%9A%B1%E7%A2%BC)%E2%80%93-%E9%A7%AD%E5%AE%A2%E7%9A%84-sql%E5%A1%AB%E7%A9%BA%E9%81%8A%E6%88%B2(
[4] https://www.puritys.me/docs-blog/article-11-SQL-Injection-%E5%B8%B8%E8%A6%8B%E7%9A%84%E9%A7%AD%E5%AE%A2%E6%94%BB%E6%93%8A%E6%96%B9%E5%BC%8F.html

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。