怎樣寫防止Sql注入的Sql語句


1.什么是SQL注入
    所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令.
 
2.如何防止SQL注入
防止SQL注入的方法有兩種:
    a.把所有的SQL語句都存放在存儲過程中,這樣不但可以避免SQL注入,還能提高一些性能,並且存儲過程可以由專門的數據庫管理員(DBA)編寫和集中管理,不過這種做法有時候針對相同的幾個表有不同條件的查詢,SQL語句可能不同,這樣就會編寫大量的存儲過程。
    b.使用參數化SQL查詢語句。
 
3.為什么參數化SQL查詢可以防止SQL注入
    在使用參數化查詢的情況下,數據庫服務器不會將參數的內容視為SQL指令的一部份來處理,而是在數據庫完成 SQL 指令的編譯后,才套用參數運行,因此就算參數中含有惡意的指令,由於已經編譯完成,就不會被數據庫所運行。 有部份的開發人員可能會認為使用參數化查詢,會讓程序更不好維護,或者在實現部份功能上會非常不便,然而,使用參數化查詢造成的額外開發成本,通常都遠低於因為SQL注入攻擊漏洞被發現而遭受攻擊,所造成的重大損失。
 
4.如何寫參數化的SQL查詢語句(C#語句 SqlServer數據庫)
在撰寫 SQL 指令時,利用參數來代表需要填入的數值
Microsoft SQL Server 的參數格式是以 "@" 字符加上參數名稱而成,如下:
SELECT * FROM myTable WHERE myID = @myID
INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)
 
例子1:
普通的Sql語句:
  string idParam="001";
  string querySql = "select count from [test] where id='"+idParam+"'";
  SqlCommand com = new SqlCommand(querySql, conn);
 
參數化的Sql語句:
  string querySql = "select count from [test] where id=@id";
  SqlCommand com = new SqlCommand(querySql, conn);
  com.Parameters.AddWithValue("@id", idParam);
 
例子2:
普通的Sql語句:
  string updateSql= "insert into [test] (id,count,datetime) values ('" + idParam + "','" + countParam+ "','" +          System.DateTime.Now.ToString() + "')";
  SqlCommand com = new SqlCommand(updateSql, conn);
 
參數化的Sql語句:
 updateSql = "insert into [test] (id,count,datetime) values (@id,@count,@datetime)";
 updateComm = new SqlCommand(updateSql, conn);
 updateComm.Parameters.AddWithValue("@id", idParam );
 updateComm.Parameters.AddWithValue("@count", countParam);
 updateComm.Parameters.AddWithValue("@datetime", System.DateTime.Now.ToString());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM