1.什么是sql注入
sql注入通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。我们在编写代码的过程中很容易忽略这个问题,比如我们通过拼接sql的方式查询,客户端就可能在输入密码时加入一些sql。这种做法可能会导致攻击者绕开服务器验证,严重的会导致数据库的全部信息泄露。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:不当的类型处理;不安全的数据库配置;不合理的查询集处理;不当的错误处理;转义字符处理不合适;多个提交处理不当。
2.sql注入实例
比如我们访问某后台管理系统:用户名随便输入,密码输入' OR '1'='1。密码验证的接口根据输入的用户名和密码查询数据表,如果查到用户记录的话,则认证通过密码验证的接口根据输入的用户名和密码查询数据表,如果查到用户名和密码匹配的话,则认证通过。
根据我们上面写的代码,这条查询执行的sql代码是,这条sql语句因为or 1=1一定返回true,所以就跳过用户验证直接登录成功。
3.解决方案
采用预编译语句集:它内置了处理SQL注入的能力,使用JDBC的PreparedStatement的setxxx方法。原理:sql注入只对sql语句的准备(编译)过程有破坏作用而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对sql语句进行解析,准备,因此也就避免了sql注入问题。
字符串过滤:使用正则表达式过滤传入的参数,判断是否匹配,如果匹配则接触本次请求,返回前端告知客户。
使用安全框架:比如apache shiro,spring security等安全框架
领取专属 10元无门槛券
私享最新 技术干货