SQL injection 幾種無效的防護程式範例迷思– 軟體品管的專業思維 | sql injection單引號
SQLinjection幾種無效的防護程式範例迷思這篇文章主要用兩個常見的範例說明無效的編碼防護方式許多人常認為只要將特殊服務去除或是使用Storeprocedure就自然不會受到SQLinjection的攻擊筆者舉兩個例子說明這樣的迷思與錯誤的觀念 迷思一:過濾特殊字元許多開發人員認為只要將SQL特殊符號去除就可以避免SQLinjection常見的簡單方式包含將‘變成”儘管這樣的方式可以避免大部分的SQLinjection但是還是會有遺漏的風險讓我們來看一個例子, 這個例子中productName已經將輸入的字串將單引號‘變成雙引號”避免SQLinjection的攻擊儘管這樣可以解決...
SQL injection 幾種無效的防護程式範例迷思這篇文章主要用兩個常見的範例說明無效的編碼防護方式
許多人常認為只要將特殊服務去除或是使用 Store procedure
就自然不會受到 SQL injection的攻擊
筆者舉兩個例子說明這樣的迷思與錯誤的觀念
迷思一: 過濾特殊字元
許多開發人員認為只要將 SQL 特殊符號去除就可以避免SQL injection
常見的簡單方式包含將 ‘ 變成 ”
儘管這樣的方式可以避免大部分的 SQL injection 但是還是會有遺漏的風險
讓我們來看一個例子, 這個例子中productName已經將輸入的字串將單引號 ‘ 變成雙引號” 避免 SQL injection 的攻擊
儘管這樣可以解決大部分的 SQL injection 攻擊, 這樣的方式到底會有什麼問題呢?
int price = ...; // price string productName = ...; // product Name productName = productName.Replace("",""); SqlConnection sql= new SqlConnection(...); sql.Open(); sqlstring=@"SELECT *" + " FROM client WHERE name= " + productName+ " or price =" + price; SqlCommand cmd = new SqlCommand(sqlstring,sql);假設駭客輸入下列攻擊字串
由於 ‘ 會被轉換成雙引號, 造成整個 SQL 語句無效, 所以攻擊會失敗
但是這樣的防護方式如果遇到有數值得輸入時, 還是會受到 SQL Injection
因此, 駭客可以透過數值的輸入, 因為數值輸入不需要引號,
例如將價格輸入為 100; shutdown —
select * FROM client WHERE ID = Book or ...