SpringBoot 防止SQL注入、XSS攻击、CSRF/CROS恶意访问

SQL注入……挺麻烦的。
这就像有人秘密地将命令添加到您的数据库中。

例如,有一个网站检查有关用户的信息...最初,这是出于善意的检查,但攻击者在其中添加了一些内容。
例如这行代码: sql DELETE FROM users;
它将直接从您那里删除。
这就是结局。

如何解决这个问题?
首先,使用预编译参数。
不要自己编写 SQL。
其次,必须对特殊字符进行转义。
例如,Like 运算符中的 % 符号。

例如,使用MyBatis,如下: 爪哇 String sql = "SELECT FROM users WHERE name = {name}";
改为: 爪哇 String sql = "SELECT FROMusers WHERE name = '" + name + "'";
后者很容易输入。

还有,当系统遇到异常时,不要直接向用户显示堆栈信息。
There may be information from the database.例如库名、表名等。

现在有一些公司使用Zuul或者Spring Cloud Gateway等网关。
请求首先经过网关,然后由网关转发。
这样做的好处是异常信息统一处理,不会泄露细节。
它还可以进行限流和权限控制。

工具方面有sqlmap,它可以帮助检测SQL注入。

还必须进行控制。
数据库执行异常,需要给您发邮件提醒。

对于生产数据库,请勿使用管理员帐户。
只需创建一个普通帐户,您将只能添加、删除和修改,但无法查看系统表。

代码审查也很重要。
你可以发现很多问题。

确实没有办法使用预编译的,所以只需启用 Druid 的过滤防火墙或编写自己的代码来过滤关键字即可。

---
XSS 攻击...向网页添加恶意代码。
一旦用户打开它,代码就会被执行。

例如,如果用户名是“admin”,攻击者会添加:
[xss_clean]alert('You被黑了!')[xss_clean]
用户登录后,弹出窗口将直接阻止您。

解决方案:
1 过滤输入和输出。
所有提交的表格都必须经过检查是否抄袭。
2 .使用CSRF令牌。
防止跨站请求伪造。

CSRF更恶心。
您甚至不知道何时有人点击了链接并且您的帐户被操纵了。

例如,如果您登录淘宝,攻击者就会向您发送一个链接。
一旦您打开它,系统就会为您下订单。

解决方案:
1 查看请求头。
例如,推荐人。
2 .使用CSRF令牌。
3 .Nginx可以限流。
例如IP每秒只能查询5 次。

Nginx 还可以阻止 IP、用户代理和 IP 代理。

例如,如果您阻止用户代理: nginx if ($http_user_agent ~ "BadBot") { 返回4 03 ;
或者创建一个过滤器包装器: 爪哇 公共类 XssAndSqlHttpServletRequestWrapper 扩展 HttpServletRequestWrapper { @覆盖 公共字符串 getParameter(字符串名称) { 字符串值 = super.getParameter(name); 如果(值!= null){ value = value.replaceAll("<", "<").replaceAll(">", ">"); } 返回值; }
将尖括号转换为 HTML 对象。

SQL系统注入漏洞怎么解决?具体就是登录时输入' or 1=1--就会登录成功

记得有一次,我在一家小公司做开发,线上项目上线前夕,突然收到测试团队的反馈,登录功能有问题。
我快速检查了代码,发现除了用户名和密码输入框之外,没有进行任何过滤或验证。
我立即意识到这是一个潜在的 SQL 注入风险。
已经是深夜了,但我还是决定加班修好。

我首先限制了用户名和密码的输入格式,去掉了空格和特殊字符,去掉了特殊字符。
接下来,我重写了登录逻辑并使用参数化查询来确保用户输入不会作为SQL代码执行。
当晚,我连续工作了近1 2 个小时,终于解决了问题。

项目上线后,没有出现类似的SQL注入问题。
不过,我在想,如果我事先意识到这些安全措施的重要性,也许我就能避免那天晚上的加班。
等等,还有一件事,我突然想到,我们公司是不是也应该定期进行安全审计和更新呢?