我们有一个ASP.NET Web API控制器,它接受来自查询字符串的以逗号分隔的数据库列名称字符串。检查此字符串名称以确保字符串中仅存在字母字符,下划线和逗号;不允许使用空格,特殊字符或数字。该字符串最终通过字符串插值添加到SQL语句中,与传递给查询字符串中的API完全相同。
将任何其他查询字符串参数作为参数添加到SQL语句中。我们遇到了参数化列表的问题,Oracle无法正确解释列,因此我们最终得到了这个解决方案。
虽然不理想,是否有任何额外的步骤来阻止通过此向量的SQL注入攻击?
我们目前正在使用Dapper进行数据访问,但经常使用普通的ADO.NET。
答案 0 :(得分:1)
如果这是你唯一可以做的事情,只要你确定你不允许数字和特殊字符如引号,等于和不同你就可以了。我甚至会说你应该对数字很好,我已经看到数字实际上被用作列名的一部分的情况,所以你可以稍微放松一下这个限制。
您基本上可以创建一个允许的白色字符列表,当请求进入时,如果任何字符不属于该列表,那么您可以抛出错误请求并在那里停止。白名单比黑名单要好得多,因为它可以更短,更容易维护。
另一层保护可以来自API本身。请确保:
所有这些事情应该能够让您受到良好的保护,因为现在没有人可以观看并查看您发送的内容,如果您正确保护您的终端,他们也无法发出请求。