一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

asp.net 預防SQL注入攻擊之我見

1、 SQL注入攻擊的本質:讓客戶端傳遞過去的字符串變成SQL語句,而且能夠被執行。
2、 每個程序員都必須肩負起防止SQL注入攻擊的責任。
  說起防止SQL注入攻擊,感覺很郁悶,這么多年了大家一直在討論,也一直在爭論,可是到了現在似乎還是沒有定論。當不知道注入原理的時候會覺得很神奇,怎么就被注入了呢?會覺得很難預防。但是當知道了注入原理之后預防不就是很簡單的事情了嗎?
  第一次聽說SQL注入攻擊的時候還是在2004年(好像得知的比較晚),那是還是在寫ASP呢。在一次寫代碼的時候,有同事問我,你的這段代碼防注入攻擊了嗎?什么攻擊?這是什么呀。
  后來到網上各種找,終于弄明白了是怎么攻擊進來的了。注入攻擊都是來自于客戶端,無論是表單提交、URL傳值還是Cookie等,其實原理都是一樣的。到了服務器端可以分成三種情況:數字、日期時間、字符串。
一、數字。
  如何注入?
  假設我們要實現一個顯示新聞的頁面,我們可能會隨手寫下下面的代碼:
復制代碼 代碼如下:
string id = Request.QueryString["id"];
string sql = "select * from news where ColID=" + id;

  如果傳遞過來的 id是我們想像的 數字(比如168),那么自然不會有什么問題。但是如果傳遞過來的id是“168 delete from table ”的話,那么sql的值就變成了“select * from table where ColID=168 delete from news”。對于SQL Server來說是支持一次提交多條SQL語句的,這個為我們提供了方便之余也為SQL注入敞開了大門。顯然如果這條SQL語句被執行的話,那么news表里的記錄就都沒有了。
 那么如何預防呢?很簡單,因為ColID字段的類型是int的,那么我們只需要驗證一下傳遞過來的id是不是整數就可以了。是整數就不存在注入;如果不是那么就有可能存在注入。即使不存在注入,把一個不是整數的id拼接進去也會造成執行錯誤。
  所以說不管是不是為了預防SQL注入,也都應該驗證id是不是整數。  
  驗證方法嘛,可以用TryParse,可以用正則,也可以自己寫函數驗證。但是不建議用try異常的方式,因為這個有效率問題。
  這里還有一個特殊情況,就是對于批量刪除這類的會傳遞過來多個數字,比如“1,2,3,10”,這個也需要驗證一下,萬一有人利用這個漏洞呢。至于驗證方法也很簡單,自己寫個函數就ok了。
二、日期時間
  這個和數字的情況是一樣的,驗證是不是日期時間即可。
三、字符串
  最麻煩、爭議最大的就是這個了。
  先看一下如何注入
  比如我們先要按照新聞標題來進行查詢,可能寫的代碼:
復制代碼 代碼如下:
string key = txtTitle.Text;
string sql = "select * from news where title like '%" + key + "%'";

  這個又是如何注入的呢?我想先問大家一個問題:如果key的值永遠都不會包含單引號,那么會不會被注入進來?
  那么用了單引號又是如何注入的呢?假設key=" ' delete from news --" ,那么sql的值就是“ select * from news where title like '%' delete from news -- ' ”。
  先用一個單引號和前面的單引號組成一對封閉的單引號,這一對單引號內部('%')就作為字符串處理,而外面的就被作為SQL語句處理,而第二個單引號被 “--”給注釋掉了,這樣就保證了整個sql語句的正確性。
  這是注入的一種方法。
  那么如何來防止呢?想想剛才的問題,如果沒有單引號是不是就天下太平了呢?對于這種情況(前面的“數字”的情況不算),到目前為止我是沒發現不用單引號,還能夠注入進來的方法。也許是我孤陋寡聞吧,不知道各位高手是否知道對于這種情況,不用單引號還能注入進來的方法。
  既然找到了罪魁禍首,那么就好辦了,把單引號干掉就ok了。key = key.Replace("'", "''");這時候sql的值就是” select * from news where title like '%'' delete from news --'”。
  對于SQL 來說在一對單引號內部的兩個單引號表示一個字符串形式的單引號。這樣我們就把罪魁禍首改造成了字符串了。在一對單引號內的“--”也是普通的字符串而不代表注釋。
  罪魁禍首是單引號,想不明白為什么有許多人都去過濾 “delete、update”這一類的關鍵字,他們都是安善良民呀,他們是很冤枉的。當然了,如果前提是程序都已經寫好了,不能修改內部代碼,那就另當別論了。至于“--”頂多算是幫兇,如果您不放心的話,把他處理了也行。
  總結:數字、日期時間的,驗證類型;字符串的,處理好單引號。
  另外為了安全起見,不要用sa連接數據庫,xp_cmdshell這一類的有危險的擴展存儲過程也應該處理一下(比如刪除)。
ps:添加修改數據的時候可以用參數化的SQL語句,但是目的不是防止注入,而是重用執行計劃。
還有就是js腳本的問題,這個還沒有仔細考慮,可以用html編碼的方式,也可以用替換的方式,還有ubb的漏洞等。

AspNet技術asp.net 預防SQL注入攻擊之我見,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美精品亚洲精品日韩专区 | 成年视频在线 | 激情图片激情小说伦理 | 日本高清一区二区三区水蜜桃 | 中文字幕精品一区二区三区在线 | 国产高清视频在线 | 真实国产乱子伦在线观看 | 亚洲狠狠狠一区二区三区 | 一区二区三区美女视频 | 五月婷婷中文字幕 | caoporen国产91在线| 夜色精品国产一区二区 | 久久网免费 | 一级成人a毛片免费播放 | 成人深夜视频 | 好吊操精品视频 | www.欧美| 婷婷开心激情 | 91av精品视频 | 久久人人爽人人爽人人片宅男 | 中文字幕久久亚洲一区 | 久久九九有精品国产56 | 一区一片| 女人张腿让男桶免费视频大全 | 免费成人在线观看视频 | 国产亚洲欧洲国产综合一区 | 国产欧美精品一区二区三区四区 | 色婷婷六月丁香在线观看 | 欧美日韩国产亚洲一区二区 | 欧美日韩国产亚洲一区二区 | 国产免费美女 | 噜色 | 国产精品一二三区 | 一区二区在线精品免费视频 | 国产精品免费观看网站 | 欧美一级精品 | 国产一区二区三区国产精品 | fenfencao在线观看免费视频 | 伊人伊成久久人综合网777 | 日韩视频在线一区 | 国产成人亚洲综合一区 |