我一直在尝试使我的代码适应FxCop规则,我发现了这样的警告: CA2100检查传递给'OleDbDataAdapter.OleDbDataAdapter( string,OleDbConnection)‘中的'WavesShaperNew.Parse(string,int)’的查询字符串是否存在可能的SQL注入攻击。如果字符串是使用任何用户输入组成的,请考虑使用存储过程或参数化SQL查询,而不是使用字符串串联生成查询。
我已经搜索了Microsoft Official Site和类似的问题,但仍然不明白这个警告是什么意思,以及如何解决它。
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);发布于 2020-08-20 17:39:59
通常,您应该参数化所有的SQL查询以避免SQL injection攻击,而不是使用字符串连接/内插。
但是,表名不能参数化。
为了避免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}]");https://stackoverflow.com/questions/63501916
复制相似问题