防止SQL注入的四种方法

说白了,防止SQL注入有四种方法:参数化查询、输入验证、使用存储过程、权限管理。
这三个动作都有其独特的侧重点,但如果使用得当,它们可以增强各个级别的敌人。

首先,我们来谈谈最重要的参数化查询。
去年做电商项目的时候,用的是MyBatis自带的预编译,结果连分号都不起作用。
通过将用户输入直接处理为文本来阻止 Assassin 等恶意软件。
然而,有一个非常重要的细节。
什么时候使用 PostgreSQL?不要忘记更改占位符语法。
MySQL 是一个问号吗?他们对这种工作收取一美元的费用。
起初我以为我可以找到任何框架,但后来我意识到出了问题。
一些旧系统 API 仍然需要手动连接。
这称为“雪崩效应”。
前面有一点延迟,一切都在我们身后。

另一点是输入验证。
去年,他们收购了一个现有系统,现在允许您实际输入表情符号作为用户名。
后来又加了一条通用规则,过滤掉除了字母、数字、下划线之外的所有内容,后台日志立刻安静了。
还有另一个重要的细节。
验证规则必须根据场景而变化。
例如,搜索框可以更宽松,密码字段必须有所需的数字+大小写字母+特殊符号。
说实话,我很困惑。
很多人没有意识到验证逻辑需要动态更新,结果不到半年就绕过了。

等一下,不要把存储过程当作金钟罩。
我的公司包装了所有操作,但忘记更新存储过程,它们仍然被注入并且缓存被清除。
用技术术语来说,这被称为“逻辑缺陷”,就像一个穿着腿上有洞的盔甲的人一样。

最后,我想谈谈一个简单的陷阱。
当涉及到权限管理时,不要使用“一刀切”的方法。
去年的审计发现,读取数据的账户实际上可以删除表。
这是荒谬的。
请记住,权限必须细化,定期审计必须像支票账户一样严格。
我们相信将许可审核外包给第三方是有价值的,这一点对任何观察者来说都是显而易见的。

spring MVC下如何能有效的防止XSS漏洞以及sql注入

坦白说,用SpringMVC防止XSS和SQL注入其实是很容易的。
关键在于几个步骤。
我们先来说说最重要的事情。
为了防止XSS漏洞,可以使用JSTL标签库。
例如,去年我们有大约 3 ,000 个项目。
该方法用于避免XSS攻击。
另一点是自定义 JavaScript 方法也很重要。
例如,去年我们定制了 escapeHTML 方法。
起初我以为可以直接使用这个方法,但后来我意识到这是错误的,必须自己修复,以便正确转义所有特殊的 HTML 字符。

等等,还有一件事:使用 ContentSecurityPolicy (CSP)。
这允许您限制浏览器加载或运行某些资源,从而降低 XSS 攻击的风险。
当谈到防止 SQL 注入时,使用准备好的语句是基础。
我们去年使用的PreparedStatement有效地防止了SQL注入。
另外重要的一点是Hibernate、MyBatis等ORM框架的使用。
这在幕后实现了参数化查询并显着降低了风险。

一开始我以为SQL注入只需要注意输入验证和清理,但后来发现我错了。
最小特权原则也非常重要。
限制数据库用户权限可以减少攻击造成的损害。
所以我认为值得尝试这些方法来看看你的 SpringMVC 应用程序是否足够安全。