警告:SQL 次注入攻击
Warning: SQL injection attacks
我一直在尝试使我的代码适应 FxCop 规则,但我发现了这个警告:CA2100 检查在 'WavesShaperNew.Parse(string, int)' 中传递给 'OleDbDataAdapter.OleDbDataAdapter(string, OleDbConnection)' 的查询字符串是否存在可能的 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);
您通常应该参数化所有 SQL 查询以避免 SQL injection 攻击,而不是使用字符串连接/插值。
但是,table 个名称无法参数化。
为避免 SQL 注入,您可以将有效的 table 名称列入白名单:
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}]");
我一直在尝试使我的代码适应 FxCop 规则,但我发现了这个警告:CA2100 检查在 'WavesShaperNew.Parse(string, int)' 中传递给 'OleDbDataAdapter.OleDbDataAdapter(string, OleDbConnection)' 的查询字符串是否存在可能的 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);
您通常应该参数化所有 SQL 查询以避免 SQL injection 攻击,而不是使用字符串连接/插值。
但是,table 个名称无法参数化。
为避免 SQL 注入,您可以将有效的 table 名称列入白名单:
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}]");