c# - C#中的SQL注入
问题描述
我的代码安全可靠吗?
if (con.State == ConnectionState.Closed)
con.Open();
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = con;
cmd4.CommandText = "exec [Insert_Request] @FileCode = " + FileCodeArchiveID + ", @FirstName = '" + FirstName_RequestInsert_textBox.Text + "' ";
cmd4.ExecuteNonQuery();
if (con.State == ConnectionState.Open)
con.Close();
还是更好用cmd4.Parameters.Add()
?
解决方案
作为一般规则,在构建 SQL 命令/查询时避免使用字符串连接。特别是如果一个或多个片段来自不受信任的来源,例如用户输入。
你应该这样做:
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = con;
cmd4.CommandType = CommandType.StoredProcedure;
cmd4.CommandText = "Insert_Request";
cmd4.Parameters.AddWithValue("@FileCode", FileCodeArchiveID);
cmd4.Parameters.AddWithValue("@FirstName",FirstName_RequestInsert_textBox.Text);
cmd4.ExecuteNonQuery();
一次,它更容易阅读(在我看来),其次使用参数回避了 sql 注入漏洞。
推荐阅读
- hadoop - HDP2.5 Hortonworks Sandbox 忘记并重置 root 用户密码
- jquery - 如何使用 jQuery 在一个包含多个表单的表单中隐藏一个“p”?
- javascript - 从 Blob 数据下载的图像不是正确的 PNG 文件
- react-native - RNPickerSelect 单元测试(改变值)
- keras - Sagemaker Keras 输出到 csv
- excel - Maatwebsite Excel无法导入汉字
- swift - 如何使用滚动视图内容偏移属性?
- wordpress - Wordpress woocommerce 贝宝交易 ID
- firebase - 从 Firestore 集合组查询中获取父母,而不检索儿子
- c++11 - C++11 -bash: ./program: 没有这样的设备