我一直在尝试使我的代码适应FxCop规则,我发现了以下警告:CA2100查看在"WavesShaperNew.Parse(string,int("中传递给"OleDbDataAdapter.OleDbData Adapter(string,OleDbConnection("的查询字符串,以了解可能的SQL注入攻击。如果字符串是使用任何用户输入组成的,请考虑使用存储过程或参数化SQL查询,而不是使用字符串串联来构建查询。
我在微软官方网站上搜索过类似的问题,但仍然不明白这个警告的含义以及如何解决
ComboBox sheets = new ComboBox();
TextBox startRange = new TextBox();
TextBox endRange = new TextBox();
string query = string.Format("SELECT * FROM[" + sheets.SelectedItem + startRange.Text + ":" + endRange.Text + "]");
query = query.Replace("'", "");
OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);
通常应将所有SQL查询参数化以避免SQL注入攻击,而不是使用字符串串联/插值。
但是,表名不能参数化。
为了避免SQL注入,您可以将有效的表名列入白名单:
var queryableTables = new HashSet<string>
{
"table1",
"table2",
// etc.
};
string tableName = sheets.SelectedItem + startRange.Text;
if (!queryableTables.Contains(tableName))
{
throw new InvalidOperationException($"{tableName} is not queryable");
}
string query = $"SELECT * FROM [{tableName}]");