日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

防SQL注入的最好实现方式是什么?

發布時間:2023/12/4 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 防SQL注入的最好实现方式是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • LeonidasFett

我的問題是:如何在 C# 中是使用SQL防注入,我的模糊理解是可以通過限定應用程序接收的字段格式來實現最終目的,比如說:email字段只能接收email的格式,name字段不能輸入特殊字符,以此類推,C#中應該也有對應的預定義方法。

這里想問大家有什么其他的思考。

回答區

  • Oliver

理論上你的做法是相對高效的,但是落地非常繁瑣,其實你完全可以使用 SqlCommand 和 SqlParameters[] 實現SQL的參數化查詢,它是一種非常通用的解決方案,無需特定字段使用特定格式的方式,參考如下代碼:

private?static?void?UpdateDemographics(Int32?customerID,string?demoXml,?string?connectionString) {//?Update?the?demographics?for?a?store,?which?is?stored??//?in?an?xml?column.??string?commandText?=?"UPDATE?Sales.Store?SET?Demographics?=?@demographics?"+?"WHERE?CustomerID?=?@ID;";using?(SqlConnection?connection?=?new?SqlConnection(connectionString)){SqlCommand?command?=?new?SqlCommand(commandText,?connection);command.Parameters.Add("@ID",?SqlDbType.Int);command.Parameters["@ID"].Value?=?customerID;//?Use?AddWithValue?to?assign?Demographics.?//?SQL?Server?will?implicitly?convert?strings?into?XML.command.Parameters.AddWithValue("@demographics",?demoXml);try{connection.Open();Int32?rowsAffected?=?command.ExecuteNonQuery();Console.WriteLine("RowsAffected:?{0}",?rowsAffected);}catch?(Exception?ex){Console.WriteLine(ex.Message);}} }
  • nerdybeardo

SQL 注入是一種很搞的問題,但還是有幾種解決辦法,要想減少風險,可以使用 ORM 框架 Linq2Entities, Linq2SQL, NHibrenate 等等,即使這么說,用這些框架還是有一定的注入風險的,SQL 注入的來源主要是用戶界面的輸入框,一個經典的例子是:假如你有一個登錄界面,需要輸入 用戶名 和 密碼。

SELECT?*?FROM?Users?WHERE?Username?=?'"?+?username?+?"'?AND?password?=?'"?+?password?+?"'"

此時有一個用戶在input上輸入 Admin'--, 那么SQL語句將會發生質的變化。

SELECT?*?FROM?Users?WHERE?Username?=?'Admin'?--'?AND?password?=?''

要解決這種問題,就需要使用參數化查詢 SQLParameter 來解決。

點評區

說實話, 對于SQL注入這塊,我個人傾向于選擇 ?ORM 和 裸SQL 之間的 Dapper 來進行處理,比如下面這樣:

var?list?=?Execute(conn?=>{var?sql?=?string.Format($@"select?t.TagNo?from?xxx?as?cjoin?xxx?as?cton?c.ID?=?ct.IDwhere??t.TagNo?in?@TagNo?and?c.Cus_ID?=?@CustomerID");var?query?=?conn.Query<string>(sql,?new?{?TagNo?=?epcList,?CustomerID?=?context.CustomerID?}).ToList();return?query;});

寫法靈活,可控性高,效率也不錯。

總結

以上是生活随笔為你收集整理的防SQL注入的最好实现方式是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。