国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:43:01
字體:
來源:轉載
供稿:網友
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 + "%'";
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙胜| 吉林市| 余江县| 双柏县| 香港 | 鲜城| 尼木县| 武冈市| 疏勒县| 临武县| 夏津县| 孝感市| 七台河市| 湘乡市| 正蓝旗| 鱼台县| 淄博市| 沁阳市| 娄烦县| 静安区| 容城县| 刚察县| 宁晋县| 西峡县| 桦甸市| 乐陵市| 长沙县| 夏邑县| 汨罗市| 合川市| 山阴县| 武义县| 蓬溪县| 河源市| 色达县| 新竹县| 乌拉特后旗| 托里县| 林芝县| 茂名市| 德阳市|