c# - DataAdapter.SelectCommand 和 SQL 注入
问题描述
我有具有导出功能的桌面应用程序。
导出列位于配置文件中。目前,未包含的列在数据库检索后从数据集中删除。
导出的 db 检索部分现在类似于:
var sql = "SELECT * FROM WHATEVER WHERE ID=:ID";
using (var cmd = ConFactory.CreateOracleCommand())
{
cmd.Parameters.Add("ID", OracleDbType.Varchar2).Value = id;
cmd.CommandText = sql;
using (var dataAdapter = new OracleDataAdapter())
{
dataAdapter.SelectCommand = cmd;
dataAdapter.Fill(ds);
}
...
}
但是,当通常只有数百列中的一两列配置为导出时,这是非常浪费的。
因此,为了提高效率,我想将配置文件中指定的列传递给方法并将 sql 重写为如下内容:
// columns is List<string>
string sColumns = string.Join(",", columns);
var sql = string.Format("SELECT {0} FROM WHATEVER WHERE ID=:ID", sColumns);
但是,如果有人在配置文件中输入了错误的内容,那么在 dataAdapter.SelectCommand 和 Fill 中使用这种方法有什么问题吗?SQL注入安全吗?我还没有找到任何关于它的文档。
从列列表中的字符串中删除所有空白“”是否有帮助?
解决方案
推荐阅读
- bash - 等待进程结束或用户输入继续
- c - 反汇编中我的函数名后面的数字是什么意思?例如
- java - 将图像从 Android 发送到 Node.js 服务器会以 URL 样式对其进行编码,并且无法很好地解码
- javascript - RegEx 用于非常安全的密码
- django - 如何将多个图像导入 Django 应用程序
- angular - 基于父输入属性的动态组件渲染?
- google-cloud-platform - 如何使用列表为 google_compute_security_policy 定义规则
- node.js - 如何在路由处理程序中接受纯文本
- java - Axis2:org.apache.axis2.classloader.BeanInfoCache.getCachedBeanInfo 中的线程阻塞
- javascript - 如何使用 Javascript 一次关闭同一个 div 类的每个实例