Web安全黑客攻防之SQL注入

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等安全框架

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181209A0PF5V00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券