我只是没有找到任何我喜欢的答案.
我想做的事情如下:
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上,您可以捕获此异常并向您的用户显示一些输出.