SQL注入攻击与防御
【摘要】 SQL注入(SQL Injection),就是通过把SQL命令插入到Web表单提交或输入页面请求的查询字符串,以达到欺骗Web后台的数据库服务器执行恶意的SQL命令的一种攻击方式。
SQL注入(SQL Injection),就是通过把SQL命令插入到Web表单提交或输入页面请求的查询字符串,以达到欺骗Web后台的数据库服务器执行恶意的SQL命令的一种攻击方式。
什么是SQL注入
SQL注入的定义
SQL注入(SQL Injection),就是通过把SQL命令插入到Web表单提交或输入页面请求的查询字符串,以达到欺骗Web后台的数据库服务器执行恶意的SQL命令的一种攻击方式。
SQL注入的攻击原理
当应用程序将用户输入的内容,拼接到SQL语句中,一起提交给数据库执行时,就会产生SQL注入威胁。由于用户的输入,也是SQL语句的一部分,所以攻击者可以利用这部分可以控制的内容,注入自己定义的语句,改变SQL语句执行逻辑,让数据库执行任意自己需要的指令。通过控制部分SQL语句,攻击者可以查询数据库中任何自己需要的数据,利用数据库的一些特性,可以直接获取数据库服务器的系统权限。
SQL注入的危害
- 查询数据库中的数据
- 执行任意数据库命令
- 上传下载任意文件
- 获取管理员权限
SQL注入的分类
手工测试
- 按注入点类型划分:数字型注入,字符型注入; 数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符串类型一般要使用单引号来闭合
- 按注入点位置划分:get注入,post注入,搜索型注入,cookie注入,http头注入,xml实体注入
- 按页面是否回显划分:有回显注入,无回显注入;有回显注入可分为:union注入,报错注入;无回显注入可分为:布尔型注入,延迟注入
按源码分析划分
- JDBC执行SQL语句中的SQL注入
- Hibernate中的SQL注入 【仅适用存在Java】
- MyBatis框架中的SQL注入 【仅适用存在Java】
- Spring Data JPA中使用native query导致的SQL注入
SQL注入的防御
从源头防御
- 首选预编译+变量绑定,拒绝参数拼接,参数化查询能确保攻击者无法改变查询内容
- 输入过滤:对用于构造SQL语句的外部输入进行严格地白名单校验,至少过滤, ,, ; -/ ( )等符号
- 编码或转义:对用户输入进行编码或转义,推荐使用Huawei WSF安全组件或OWASP提供的ESAPI
辅助防御
- 最小权限:基于用户需要什么样的权限来为用户分配权限,把每个数据库用户的权限都最小化,不能使用操作系统管理员用户运行数据库,减少攻击带来的危害和损失
- 整网解决方案中部署WAF(Web应用防火墙),入侵检测、入侵保护、数据库审计等系统
智能云网
智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开放社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。欢迎各位前来体验。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)