我必须修复一个容易受到 SQL 注入攻击的项目。
项目中每一页的所有表单都没有使用参数化查询,而是简单的字符串查询。
例如,我有搜索页面,查看后面的代码,我发现有一种方法可以基于文本字段创建查询,例如:CreateQuery()
string sQuery = "";
sQuery += "b.name like '%" + txtName.Text + "%'";
然后在btnSearch_Click()
我有执行查询的方法:
query = CreateQuery();
var totalList = GetAllBlaBla(query);
我的问题是:
由于我有数百个表格和数千个formText
FIX 值,是否有一个“快速”的解决方案来实现,例如
- 以某种方式参数化查询或处理情况的全局函数?
- 由于在每个类中查询都是在
SubmitButton_Click()
方法后面的代码中执行的,我可以在这里处理这种情况,当然是在每个类中吗? - 我是否应该修改表单代码隐藏中的每个表单和每个条目以参数化 SQL 字符串,这将需要一百万年?
(编辑)编码/解码输入值呢?所以上面的例子将是:
string sQuery = ""; var txt = var txt = HttpUtility.HtmlEncode(txtName.Text); sQuery += "b.name like '%" + txt + "%'";
这是一个可能的临时补丁吗?
5-(编辑)这是一个可能的解决方案,还是根本没有改变任何东西?
cmd.Parameters.Add("@txtNameParameter", SqlDbType.VarChar);
cmd.Parameters["@txtNameParameter"].Value = txtName.Text;
sQuery += "b.name like '%" + (string)cmd.Parameters["@txtNameParameter"].Value + "%'";
问题是我必须返回一个字符串,因为处理查询的逻辑是在另一个将字符串作为查询的业务类中定义的,我不能给它一个 CommandType 或 SqlDataAdapter ...
建议?
提前致谢。