SQL注入攻击与防御

举报
HZDX 发表于 2022/03/14 16:25:22 2022/03/14
【摘要】 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

 辅助防御 

  • 最小权限:基于用户需要什么样的权限来为用户分配权限,把每个数据库用户的权限都最小化,不能使用操作系统管理员用户运行数据库,减少攻击带来的危害和损失
  • 整网解决方案中部署WAFWeb应用防火墙),入侵检测、入侵保护、数据库审计等系统

   智能云网   

智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开放社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。欢迎各位前来体验。

112059dpm5jry5hl51swgy.jpg

>>戳我了解更多<<

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。