SQL注入原理及其预防

0x00 什么是SQL注入

    首先你得知道什么是SQL,结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。而SQL注入就是将恶意的SQL命令输入到后台数据库中,可以通过web表单提交、输入域名或页面请求的查询字符串进行注入。

0x01 SQL注入原理

    web应用程序没有对用户输入的语句执行合法性检测,攻击者可以在web应用程序中事先定义好的查询语句中添加或构造另外的SQL语句,进行非授权的查询,从而导致数据泄露。出现SQL的原因主要有以下几点:

①不当的字符处理

②不安全的数据库配置

③不合理的查询处理

④不当的错误处理

0x02 SQL注入分类

    1. 基于错误的SQL注入;

    2. 联合查询的注入;

    3. 堆查询注入;

    4. SQL盲注:(1)基于布尔盲注;(2)基于时间的盲注;(3)基于报错的盲注;

    5. 基于如何输入数据类型的SQL注入:(1)字符串;(2)数字或整数;

    注:还有根据程度和顺序的注入,一阶注入和二阶注入。一阶注入就是指输入的语句对Web直接产生了影响,出现了结果。二阶注入类似存储型XSS,是指输入提交的语句,无法直接对Web应用程序产生影响,通过其他的辅助间接的对Web产生危害。

0x03 SQL注入预防

    1. 最佳选择就是使用安全的API,完全避免使用解释器,或提供参数化界面的接口,或迁移到ORM或实体框架。

    2. 使用正确的“白名单”的具有恰当规范化的输入验证方法同样有助于防止注入攻击,但这不是一个完整的防御,因为许多应用程序在输入中需要特殊字符。例如文本区域或移动应用程序的API。

    3. 对于任何剩余的动态查询,可以使用该解释器的特定转义语法转义特殊字符。

    4. 在查询中使用LIMIT和其他SQL控件,以防止SQL注入时大量地泄露记录。

注意: 当参数化时,存储过程仍然可以引起SQL注入,如果PL/SQL或T-SQL将查询和数据连接在一起,或者执行带有立即执行或exec()的恶意数据。

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

0x04 小结

这里只对SQL的原理和防御方法进行了简单的概述,具体的注入技术还在研究当中。本人还是小白,需要学习的东西还有很多,有什么错误的地方还请各位大佬多多指教。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值