回答

收藏

插入时防止进行SQL注入

技术问答 技术问答 157 人阅读 | 0 人回复 | 2023-09-13

我在寻找一些预防措施SQL注入的技巧。在一个论坛上告诉我我的代码不安全,我正在寻找一个足够好的人来帮助我解决此问题。3 L1 {' @5 u( K! v
我有一个Web提交后转到表单aspx.cs页面,然后插入数据ms sql数据库。% r+ g+ `$ D1 K" N: R
protected void Submit_Click(object sender,EventArgs e)                                                                                                                                                                                                                 string FullStartTime = StartTimeHourList.SelectedValue   ":"   StartTimeMinuteList.SelectedValue   " "   StartTimeAMList.SelectedValue;        string FullEndTime = EndTimeHourList.SelectedValue   ":"   EndTimeMinuteList.SelectedValue   " "   EndTimeAMList.SelectedValue;        OleDbConnection conn;        OleDbCommand cmd;        conn = new System.Data.OleDb.OleDbConnection("");        cmd = new System.Data.OleDb.OleDbCommand();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;conn.Open();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cmd.Connection = conn;        var sql = String.Format(@"INSERT INTO FormTable1 (Nonprofit,Contact,Phone,Email,Event,StartDate,EndDate,StartTime,EndTime,Place,Comments,SubmitDate) values                                           {0}、{1}、{2}、{3}、{4}、{5}、{6}、{7}、{8}、{9}、{10}、{11}",                                                          NonprofitTxtBox.Text,ContactTxtBox.Text,PhoneTxtBox.Text,EmailTxtBox.Text,EventTxtBox.Text,                                                          StartDateTxtBox.Text,EndDateTxtBox.Text,FullStartTime,FullEndTime,PlaceTxtBox.Text,CommentsTxtBox.Text,DateTime.Now);        cmd.CommandText = sql;        cmd.ExecuteNonQuery();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;conn.Close();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ h( X% P& E- [! {7 P+ H9 c    解决方案:                                                                ( j. ]$ T' g  X$ o! q& ~( K
                                                                最直接的解决方案是 3 q% c2 ]' c0 T4 m- O! r' a- |
通过串联字符构建sql,而是使用params。假如你用的是SqlCommand,可执行以下操作,否则按照@MarcB建议操作
0 ~$ E+ l7 b2 n  E7 S/ L6 L2 {SqlCommand cmd = new SqlCommand("INSERT dbo.Table (field1,field2,field3) VALUES (@f1,@f2,@f3)",conn);cmd.Paramters.Add("@f1",SqlDbType.VarChar,50).Value = "abc";cmd.Paramters.Add("@f2",SqlDbType.Int).Value = 2;cmd.Paramters.Add("@f3",SqlDbType.VarChar,50).Value = "some other value";
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则