Anarckk
转载:https://www.cnblogs.com/loveyoulx/p/9526068.html
SQL注入本质上,是程序将用户输入的参数当成命令的一部分进行解析,从而使用户可以自由搜索我们的数据库中的记录。
解决方法,是将用户输入的内容进行解析和转义,将用户输入内容中的恶意代码转为普通字符串,从而保护数据库不被攻击。
SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。
最常见的就是我们在应用程序中使用字符串联结方式组合 SQL 指令,有心之人就会写一些特殊的符号,恶意篡改原本的 SQL 语法的作用,达到注入攻击的目的。
举个栗子:
比如验证用户登录需要 username 和 password,编写的 SQL 语句如下:
1 | String querySql = "select * from user where (name = '"+ username +"') and (pw = '"+ password +"');"; |
username 和 password 字段被恶意填入
1 | username = "1' OR '1'='1"; |
与
1 | password = "1' OR '1'='1"; |
将导致原本的 SQL 字符串被填为:
1 | select * from user where (name = '1' or '1'='1') and (pw = '1' or '1'='1'); |
实际上运行的 SQL 语句将变成:
1 | select * from user; |
也就是不再需要 username 和 password 账密即达到登录的目的,结果不言而喻。
在集成mybatis-plus过程中,我将 pagehelper-spring-boot-starter 拆成两个依赖包
1 | <!-- 分页插件 --> |
Github地址
pagehelper是github上开源的分页插件,可以做到无侵入,不用修改select语句的分页插件,它应该是通过调用mybatis钩子,在查询时自动修改查询语句,自动加上limit语句做到分页的。