现今,公安机关设立了专门负责信息安全的部门。前几天,我们公司收到了一份整改通知,要求加强防范SQL注入攻击的措施。
我们公司开始对网站进行了简单的测试,发现能够检测出一般的SQL注入。然而,尽管如此,我们仍然收到了整改通知。显然,我们还未能完全覆盖所有SQL注入的可能方法。因此,我开始着手研究SQL注入的各种手法。
SQL注入攻击主要包括基于注释、基于一般错误、基于时间、联合查询和身份认证绕过等几种方式。
网站常见的请求注入方式主要有三种:普通的GET请求、表单POST提交和JSON格式的POST提交。
经过几天的努力,我们成功开发了防范SQL注入攻击的功能,并将其制作成了一个中间件。
我们使用了NuGet,项目引用了ToolGood.SQLFirewall。
在main方法中,我们使用了以下代码:
app.UseSQLFirewall_ServerHeader(“ToolGood”); //替换头信息,减少服务器信息
app.UseSQLFirewall(SQLFirewallType.MsSQL); //使用防SQL注入
我们还忽略了部分URL的检测,代码如下:
app.UseSQLFirewall(SQLFirewallType.MsSQL, “/Admins/Logs/Ajax/GetLoginList”, “/Admins/User/Ajax/*”);
注:星号为通配符,放在路径最后一位有效。
代码地址:https://github.com/toolgood/ToolGood.SQLFirewall
参考资料:https://github.com/payloadbox/sql-injection-payload-list
防范SQL注入攻击有两种简单的方法,即使用带参数的SQL语句和使用存储过程。
但是,对于老项目来说,可能不一定按照这个逻辑来。可以考虑使用参考反向代理,以应对SQL注入攻击。
代码地址:https://github.com/toolgood/ToolGood.SQLFirewall/tree/main/ToolGood.Navigation