[FAQ] ADO.NET 參數寫法 Parameter(避免SQL Injection資料隱碼攻擊)

ADO.NET 參數寫法 Parameter(避免SQL Injection資料隱碼攻擊)

回答論壇上的問題

 

這個答案散見在我的書本與範例裡面

我整理如下

Conn代表資料庫連結  SqlConnection

 

 

....................................................................................................................................................

DataReader (SqlCommand)

            String SQLString = "Select * From test Where id = @id ";    // 注意到沒?連「單引號」都不可以出現

            SqlCommand cmd = new SqlCommand(SQLString, Conn);

            cmd.Parameters.Add("@id", SqlDbType.Int, 4);

            cmd.Parameters["@id"].Value =TextBox1.Text;

 

            //簡易寫法。 cmd.Parameters.AddWithValue("@參數名稱", 輸入的數值);

            //上面兩段參數,可以寫成  cmd.Parameters.AddWithValue("@id", TextBox1.Text);

 

....................................................................................................................................................

DataSet / DataTable (SqlDataAdapter)

// 注意!!資料隱碼攻擊(Sql Injection),請使用參數的寫法。

            String SQLString = "Select * From test Where id = @id ";  // 注意到沒?連「單引號」都不可以出現

            SqlDataAdapter myAdapter = new SqlDataAdapter(SQLString, Conn);

            //== 參數必須在執行SQL指令的時候,寫在下方等待呼叫。不然程式會出錯。

                ////舊的寫法:

                //myAdapter.SelectCommand.Parameters.Add("@id", SqlDbType.Int, 4);

                //myAdapter.SelectCommand.Parameters["@id"].Value = TextBox1.Text;

                

                //新的寫法:合併在一起寫

                myAdapter.SelectCommand.Parameters.AddWithValue("@id", TextBox1.Text);

 

完整的範例可以參閱我的書本上集

 

.AddWithValue()方法,請看 msdn網站 。

他的範例就介紹了我上面的兩種作法,請擇一使用

http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx

 

如果您使用 OleDb或是 Odbc,請把參數寫成「?」符號 (後面不可以帶上參數名稱喔!只有一個 ?符號而已)

請參閱  http://msdn.microsoft.com/zh-tw/library/zxdcah9t(v=vs.110).aspx

 

下一篇文章:

[FAQ] ADO.NET 參數寫法 Parameter #2 -- SqlParameterCollection

https://dotblogs.com.tw/mis2000lab/2015/01/21/sqlparametercollection_sqlparameter_addrange 

FAQ -- 資料隱碼攻擊(SQL Injection)

http://www.dotblogs.com.tw/mis2000lab/Tags/SQL%20Injection/default.aspx (我以前的文章)

你的網站正在裸奔嗎?  http://blog.darkthread.net/post-2008-05-07-are-your-website-naked.aspx

SQL Injection 常見的駭客攻擊方式  http://www.puritys.me/docs-blog/article-11-SQL-Injection-%E5%B8%B8%E8%A6%8B%E7%9A%84%E9%A7%AD%E5%AE%A2%E6%94%BB%E6%93%8A%E6%96%B9%E5%BC%8F.html

游擊式的SQL Injection攻擊  http://blog.darkthread.net/post-2008-05-22-hit-and-run-sql-injection-attack.aspx

 

<!-- google_ad_client = "ca-pub-0412737137097864"; /* 728x90 */ google_ad_slot = "2295073474"; google_ad_width = 728; google_ad_height = 90; //-->

我上課會解說,但幾個攻擊方式不便公開,

以免有心人拿到(學到)去測試「別人網站」

 

這本書有蒐集不少範例,推薦給您  

Beginning ASP.NET Security (0470743654) cover image

Beginning ASP.NET Security

Barry Dorrans

ISBN: 978-0-470-74365-2

Paperback

436 pages

March 2010

 

....................................................................................................................................................

另外,關於XSS攻擊(跨網站腳本攻擊,Cross-Sitws Script),可以看這本書

 XSS 網站安全技術與實務 : 防護解密剖析大進擊 (博碩) & Microsoft AntiXSS

 

防範 XSS的話,ASP.NET有提供 AntiXSS

檢查使用者輸入內容 - 以 AntiXss 做編碼

http://blog.xuite.net/tolarku/blog/26008423-%E6%AA%A2%E6%9F%A5%E4%BD%BF%E7%94%A8%E8%80%85%E8%BC%B8%E5%85%A5%E5%85%A7%E5%AE%B9+-+%E4%BB%A5+AntiXss+%E5%81%9A%E7%B7%A8%E7%A2%BC

MICROSOFT ANTIXSS LIBRARY 3.1 UPGRADE 4.0  (KingKong Bruce)

http://blog.kkbruce.net/2010/11/microsoft-antixss-library-31-upgrade-40.html

msdn官方網站 -- System.Web.Security.AntiXss 命名空間

http://msdn.microsoft.com/zh-tw/library/system.web.security.antixss(v=vs.110).aspx

 

<!-- google_ad_client = "ca-pub-0412737137097864"; /* 728x90 */ google_ad_slot = "2295073474"; google_ad_width = 728; google_ad_height = 90; //-->

相關文章:

Microsoft Anti-XSS (Anti-Cross Site Scripting Library) 避免XSS攻擊

https://dotblogs.com.tw/mis2000lab/2014/11/04/microsoft_anti-xss_v43 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 140hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.tw  或  school (at) mis2000lab.net

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

.........   facebook社團   https://www.facebook.com/mis2000lab   ......................

.........  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課