【发布时间】:2013-07-23 18:43:24
【问题描述】:
我正在寻找一些防止 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();
}
【问题讨论】:
-
您直接将外部数据嵌入到您的查询中。您需要使用带有占位符的预处理语句:msdn.microsoft.com/en-us/library/…
-
如果你在网上找不到任何关于防止c#中SQL注入的资料,你需要一个新的职业。
-
@BradM 我什么时候说这是一种职业?
-
@MarcB 谢谢 Marc,这个链接很有帮助。
标签: c# sql sql-injection