web安全-sql注入漏洞

本文详细介绍了SQL注入漏洞的原理,包括注入条件、判断方法及类型区分。讲解了SQL的增删改查语句及其常用关键字,并探讨了各种常见的SQL注入方式,如联合注入、布尔盲注、时间盲注和报错注入,通过实例解析了这些注入方法的运用。此外,还提供了判断和利用注入漏洞的技巧,帮助读者了解如何防止和应对SQL注入攻击。
摘要由CSDN通过智能技术生成

一.sql注入漏洞原理

1 注入条件:

  • 参数可控:从前端传给后端的参数内容是用户可以控制的
  • 参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。

2 判断是否存在注入漏洞:

在参数后面加上单引号,比如: http://xxx/abc.php?id=1' 如果页面返回错误,则存在 Sql 注入。
原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
(如果未报错,则有可能页面对单引号做了过滤,这时需使用判断语句进行注入)

3 判断注入类型:

数字型判断:

当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id = x这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:

  • Url 地址中输入http://xxx/abc.php?id=x and 1=1页面依旧运行正常,继续进行下一步。
  • Url 地址中继续输入http://xxx/abc.php?id=x and 1=2页面运行错误,则说明此 Sql 注入为数字型注入。

 

假设如果这是字符型注入的话,查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设不成立。

字符型判断:

  • Url 地址中输入 http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。
  • Url 地址中继续输入 http://xxx/abc.php?id= x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。

 

二.sql的增删改查语句

 1.增加语句

新增一条数据
insert into 表名 values(全部列的值,用”,“分割);
insert into 表名 (字段1, 字段2) values (值1, 值2);

新增多行数据
insert into 表名 values(全部列的值),(全部列的值)....;
insert into 表名 (字段1, 字段2) values (值1, 值2),(值1, 值2),(值1, 值2)....;

2.删除语句

delete from 表名 where 条件;
注意:在修改或者删除数据的时候一定要指定条件,否则可能造成所有数据被污染或者清空。

delete from表名
清空数据表内容,不释放空间,即:下次插入表数据,id依然接着删除数据的id继续增加

truncate 表名;
清空表数据,释放空间,即:下次插入表数据,id从1重新开始

drop table表名1
整张表被删除,要使用该表必须重新建

3.修改更新语句

update 表名 set 列1=值1,列2=值2,... where 条件;
例:
update Student set name='张三'where name='李四'

4.查找语句

select * from 表名;
select * from 表名 where 条件;
select 字段 from 表名 where 条件;

select * from 表名 where 字段 like '%值%';
模糊查询like,_代表一个任意字符,%代表多个任意字符

SELECT * from 表名 WHERE 字段 in (上限,下限);
集合查询in

例:

查询姓刘的学生:
SELECT * from student WHERE name like '刘%';

查询身高为160到180的学生:
SELECT * from student WHERE height in (160,180);

常用的关键字查询:

BETWEEN(两个值之间的数据)

查询两个值之间的数据
语法:select * from 表名 where 字段名 between 值 and 值;

查询体重在65-70的学生:
select * FROM student WHERE weight BETWEEN 65 AND 70;

AS(别名)

为字段名指定别名
语法:select 字段名1 AS 别名,字段名2 AS 别名,.... from 表名

将字段名name改为别名学生名称显示:
select name AS '学生名称' FROM student

Distinct(查询时忽略重复值)

语法:SELECT DISTINCT 字段名 FROM 表名

查询学生所在的班级有哪些:
select DISTINCT class_id FROM student

SUM(求和)

语法:select SUM(字段名) from 表名;

查询学生总身高:
select SUM(height) AS &
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值