C#參數化執行SQL語句,防止漏洞攻擊本文以MySql為例【20151108非查詢操作】


為什么要參數化執行SQL語句呢?

一個作用就是可以防止用戶注入漏洞。

簡單舉個列子吧。

比如賬號密碼登入,如果不用參數,

寫的簡單點吧,就寫從數據庫查找到id和pw與用戶輸入一樣的數據吧

sql:select id,pw where id='inputID' and pw='inputPW';

一般情況沒什么問題,但如果用戶輸入的id或PW帶 ‘ ,這是可能就會出現漏洞,bug了

比如用戶輸入的id是: 1‘ or ’1‘=‘1

這是sql語句執行的是:select id,pw where id='1‘ or ’1‘=‘1 ‘ and pw='inputPW';

那數據庫里的所有賬號密碼都符合這個條件了。

簡而言之,用戶可以通過 ' 來改變你SQL的執行。

參數化就可以避免這個問題了。

 

 

 

/************************非查詢操作*****************************************/

//今天太晚了,先寫個非查詢操作的,明天在寫查詢操作的。

/****函數*****/
        /// <summary>
        /// 增刪改數據,返回影響行數,沒有則返回-1
        /// </summary>
        /// <param name="sql">sql語句</param>
        /// <param name="ps">參數</param>
        /// <returns>返回影響行數</returns>

       static string connStr ="server=IP;User Id=賬號名;password=密碼;Database=表名"public static int ExecuteNonQuery(string sql, params MySqlParameter[] ps)
        {

            using (MySqlConnection conn = new MySqlConnection(connStr))
            {
                using (MySqlCommand cmd = new MySqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(ps);
                    conn.Open();
                    return cmd.ExecuteNonQuery();//返回受影響行數
                }
            }
        }

 

/****應用舉例****/

   public void InsertData()
        {
               int cid=1,aid=2;

               string name="hha";
                string sql = "insert into tb_compart (compartID,compartName,areaID)values(@compartID,@compartName,@areaID);";
                MySqlParameter[] ps ={   new MySqlParameter("@compartID",(object)cid),
                new MySqlParameter("@compartName",name),
                new MySqlParameter ("@areaID",(object)aid)};
                int r = Mysql.MySQLHelper.ExecuteNonQuery(sql, ps);//r得值就是受影響的行數,執行失敗r=-1;
            }

        }

 

 


免責聲明!

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



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