ado.net防止sql注入

簡介:當web平臺真正上線之後,遇到的問題之一就是黑客攻擊的問題,攻擊的手段中常用的手段就是DDOS和sql注入,關於DDOS攻擊,也就是分佈式拒絕服務式攻擊,就是黑客黑掉大量pc機之後,發下命令,全部被黑的機器同時去訪問服務器,當超出服務器的負載時,服務器就是down掉,也就達到了一定的目的,這種攻擊,在程序中用技術是解決不了的,最簡單的辦法就是拼money,加大帶寬,服務器等等,其他的方法,就不多說了,來說另一種攻擊,sql注入,這種攻擊,是很多古老的手段,也是簡單的攻擊手段,據統計,目前的服務器攻擊中,大約有2成是這種攻擊,這種手段的原理就是,利用web平臺主要是form表單提交時留下的漏洞,通過填寫特殊文本,來改變開發人員的sql語句,按照自己的意願來執行sql,並通過web服務器的漏洞,獲取sql執行的結果,來達到自己的階段目的

1.早期sql注入

asp時期,黑客通過掃描,找到web中form提交時的漏洞,來改變執行的sql,如果這時配置服務器大意,讓異常或者錯誤發送到客戶端,則黑客可以通過這種簡單的方式,獲取數據庫,版本,數據庫名,表名,查詢任意數據,更甚者,可以增刪改數據,web平臺也就相應的癱瘓了,現在的asp.net和新版本的iis默認情況下是不允許錯誤發送的客戶端的,除非你強制可以發送,但是用戶的輸入中的sql注入,還需要我們自己來解決

2.目前sql注入

上面已經說了,目前sql注入,主要是通過,掃描form提交數據的漏洞,揣測執行的sql,通過拼接特殊的文本,來達到按照自己的意願來執行sql的目的,這種風險主要在於執行sql前沒有檢查sql的合法性

3.防範

在用.net中開發web時,用到的持久層有,ado.net,ibatisnet,ef,nhibernate,早起的還有linq to sql等,下面說說自己對各個持久層防止sql注入方法的理解

ado.net 中,我們用ado.net操作數據庫,最大的優點就是靈活,ado.net操作數據庫,通過sqlcommand,我們可以指定文本和存儲過程,兩種方式,文本中我們可以自己拼接sql和使用sqlparameter,如果我們使用前一種方法,就要自己來驗證用戶的輸入,主要是string的輸入是否合法,如果我們用sqlparameter凡事,開發人員就不用擔心會被sql注入了,這是因爲,ado.net拼接執行的sql前,會驗證sqlparameter中字符串的合法性,有效的阻止了sql注入,關於具體的防止原理,個人推測應該是,按照關鍵字進行處理,比如; ' - -/**/ 等字符的處理,存儲過程中,也建議採用參數方式,讓ado.net來爲我們自動阻止sql注入


ibatisnet中,在這個辦自動化orm中我們只需要在map文件中,寫sql的時候,把$field$替換成#field#即可,這樣框架便會自動阻止sql注入


ef,nhibernate,linq to sql 等orm框架,都是通過底層封裝調用ado.net的方式來阻止sql注入的,不需要我們特殊的配置


ps:上面簡單的談了下自己對sql注入的理解,今天就到這裏吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章