c# – 如何在.Net Web API的动态sql中阻止sql注入?

我只是没有找到任何我喜欢的答案.

我想做的事情如下:

public class TestSqlInjectionController : ApiController
{
    public IEnumerable<TestSqlInjectionUser> Get([ValidateSqlInjection]string usernameFilter = null)
    {

其中[ValidateSqlInjection]查找基本信息,如传入过滤器包含;, – ,DROP或DELETE时抛出错误.

所以我有一个可维护的清单.

然后创建一个自定义属性:

[FilterField1ValidateSqlInjection]

这里可能将逗号分隔的列表拆分为数组.

然后滚动数组并确保每个元素与枚举中的一个值匹配.

这听起来像正朝着正确的方向前进吗?

问题是我们必须使用动态SQL进行大量的分页,排序和过滤.没有其他办法了.

所以命令参数并没有真正为我们做很多事情.

对于那些有.Net SQL注入体验的人来说,自定义属性属性听起来是个好主意吗?

最佳答案 最好的选择是使用SQL参数,但由于它还不够,我会尝试使用像SQL模式这样的SQL执行器.

相反,您尝试使用属性装饰所有可能的输入,创建一个负责执行所有动态查询的辅助类,并在执行方法测试内部创建任何SQL注入模式.您可以使用regex like this example执行此操作,如果找到则抛出异常.

在您的UI上,您可以捕获此异常并向您的用户显示一些输出.

点赞