Web SQL注入攻擊的危害性
Web安全紛繁復雜,危害最嚴重的當屬SQL注入。SQL Injection,中文名稱為“SQL 注入”是一種數據庫攻擊手段,也是WEB應用程序漏洞存在的一種表現形式,它的實際意義就是利用某些數據庫的外部接口把用戶數據插入到實際的數據庫操作語言當中,從而達到入侵數據庫乃至操作系統的目的。
SQL Injection 的主要形式是,直接將代碼插入與 SQL 命令串聯并執行的用戶輸入變量中,間接的將惡意代碼注入要在表中存儲或作為元數據存儲的字符串,在存儲的字符串隨后串連到一個動態 SQL 命令中時,執行該惡意代碼?;镜墓羰翘崆敖K止文本字符串,然后追加一個新的命令。由于插入的命令可能在執行前追加其他字符串,因此攻擊者將用注釋標記“??”來中止注入的字符串。執行時,此后的指令將被忽略.
SQL Injection 攻擊技術就起本質而言,它利用的工具是SQL的語法,針對的是應用程序開發者編程中的漏洞,當攻擊者能操作數據,向應用程序中插入一些SQL語句時,SQL Injection攻擊就發生了。實際上,SQL Injection攻擊是存在于常見的多連接的應用程序中的一種漏洞,攻擊者通過在應用程序預先定義好的查詢語句結尾加上額外的SQL語句元素,欺騙數據庫服務器執行非授權的任意查詢。這類應用程序一般是Web Application,它允許用戶輸入查詢條件,并將查詢條件嵌入SQL 語句中,提交到數據庫中執行。通過構造畸形SQL語句攻擊者能夠獲取額外的信息數據。
就風險而言,SQL Injection攻擊也是位居前列,和緩沖區溢出漏洞相 比,其優勢在于能夠輕易的繞過防火墻直接訪問數據庫,甚至能夠獲得數據庫所在的服務器的訪問權限。在某些環境下,SQL Injection 漏洞的風險要高過
其他所有的漏洞。SQL Injection攻擊利用的是SQL 語法,這使得這種攻擊具有廣泛性。特點鮮明:
隱蔽性強
利用Web漏洞發起對WEB應用的攻擊紛繁復雜,包括SQL 注入,跨站腳本攻擊等等,一個共同特點是隱蔽性強,不易發覺,因為一方面普通網絡防火墻是對HTTP/HTTPS全開放的,另一方面,對Web應用攻擊的變化非常多,傳統的基于
特征檢測的IDS對此類攻擊幾乎沒有作用。
攻擊時間短
可在短短幾秒到幾分鐘內完成一次數據竊取、一次木馬種植、完成對整個數據庫或Web服務器的控制,以至于非常困難作出人為反應。
危害性大
南昌網站建設公司百恒網絡認為目前幾乎所有銀行,證券,電信,移動,政府以及電子商務企業都提供在線交易,查詢和交互服務。用戶的機密信息包括賬戶,個人私密信息(如身份證),交易信息等等,都是通過Web存儲于后臺數據庫中, 這樣,在線服務器一旦癱瘓,或雖在正常運行,但后臺數據已被篡改或者竊取, 都將造成企業或個人巨大的損失。據權威部門統計,目前身份失竊(identity theft)已成為全球最嚴重的問題之一。
非常嚴重的有形和無形損失
目前,包括政府以及很多大型企業尤其是在國內外上市的企業, 一旦發生這類安全事件,必將造成人心惶惶,名譽掃地,以致于造成經濟和聲譽上的巨大損失,即便不上市,其影響和損失也是不可估量的。
防SQL注入的例子
Asp程序
關于Asp程序防Sql注入,南昌網絡公司百恒網絡建議:強制類型轉換,下為過濾整個整形數據變量
nId = cint(request("id"))
sql = "select * from user where id=" + cstr(nId)
Asp.NET程序
利用參數方式查詢和SqlParameter參數,來杜絕SQL 注入型式。
strUid = Request.QueryString["uid"].Trim();
strSql = "SELECT * FROM [users] WHERE [uid]=@uid";
sqlParameter = new SqlParameter("@uid", SqlDbType.VarChar);
sqlParameter.Value = strUid;
sqlCommand.Parameters.Add(sqlParameter);
sqlDataReader = sqlCommand.ExecuteReader();
strUid = Request.QueryString["uid"].Trim();
strSql = "SELECT * FROM [users] WHERE [uid]=@uid";
sqlCommand = new SqlCommand(strSql, sqlConnection);
sqlParameter = new SqlParameter("@uid", SqlDbType.VarChar);
sqlParameter.Value = strUid;
sqlCommand.Parameters.Add(sqlParameter);
sqlDataReader = sqlCommand.ExecuteReader();
strUid = Integer.Parse(Request.QueryString["uid"].Trim());
strSql = "SELECT * FROM [users] WHERE [uid]=@uid";
sqlCommand = new SqlCommand(strSql, sqlConnection);
sqlParameter = new SqlParameter("@uid", SqlDbType.Int);
sqlParameter.Value = strUid;
sqlCommand.Parameters.Add(sqlParameter);
sqlDataReader = sqlCommand.ExecuteReader();
Dim SSN as String = Request.QueryString("SSN")
Dim cmd As new SqlCommand("SELECT au_lname, au_fname FROM authors
WHERE au_id = @au_id")
Dim param = new SqlParameter("au_id", SqlDbType.VarChar)
param.Value = SSN
cmd.Parameters.Add(param)