如何解决警告:SQL注入攻击
我一直在尝试使我的代码适应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攻击,而不是使用字符串串联/插值。
但是,表名无法参数化。
为避免在此处进行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}]");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。