目标:防止SQL注入。
我想从选择查询中动态传递列名和表名。
请考虑以下方法:
public bool PassColumnTableDynamic(string columnName, string tableName)
{
string commandText = string.Format(select {0} from {1}, columnName, tableName);
try
{
using (var command = new SqlCommand(commandText, _connection))
{
command.ExecuteScalar();
}
}
catch (Exception ex)
{
throw new Exception("error",ex);
}
return true;
}
commandText容易受到SQL注入的攻击。我该如何预防?
我有创建存储过程并将其作为此方法中的参数传递的解决方案。但是我不想创建一个存储过程。
C#代码中有可用的解决方案吗?
如果用户无法直接输入这些名称,请像您一样注入它们...
否则,没有直接的方法,请考虑像"^[a-zA-Z]*$"
这样使用正则表达式,以便用户只能插入文本