正在阻止插入时的SQL注入
本文关键字:SQL 注入 插入 | 更新日期: 2023-09-27 18:24:25
我正在寻找一些防止SQL注入的技巧。我在一个论坛上被告知我的代码不安全,我正在寻找一个足够好的人来帮助我解决这个问题。
我有一个网络表单,提交后会转到aspx.cs页面,并将数据插入ms-sql数据库。
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();
}
最简单的修复方法是简单地而不是通过将字符串连接在一起来构建sql,而是使用params。如果您使用SqlCommand,您可以执行以下操作,否则请按照@MarcB建议的执行
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";