sql注入基础(一)

SQL注入漏洞

sql注入漏洞,简称注入攻击,sql注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序忽略了对输入字符串中夹带的sql指令的检查,被数据库认为是正常的sql指令而运行,从而使数据库收到攻击,可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码,被植入后门程序等危害。

DBMS:数据库

SQL语句分类:

1.DDL:数据定义语言,用来定义数据库对象创建、删除、修改库表结构。

2.DML:数据操作语言,用来定义数据库记录。增删改表记录。

3.DCL:数据控制语言,用来定义访问权限和安全级别。

4.DQL***** 数据查询语言。及其重要,用来查询数据。

1 数据库

*查看所有数据库:SHOW DATABASES
*创建数据库:CREATE DATABASE[IF NOT EXISTS]mydb1[CHARSET=utf8]
*切换(选择要操作的)数据库:USE数据库名
*删除数据库:DROP DATABASE[IF EXISTS]mydb1
*修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8

2数据类型

2.数据类型(列类型)int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;decimal:浮点型,在表单钱方面使用该类型,因为不会出现精度缺失问题;

char:固定长度字符串类型;char(255),数据的长度不足指定长度,补足到指定长度!”
char(255)1
varchar:可变长度字符串类型;varchar(2),zhangSan

text(clob):字符串类型;

3表控制

creat table 表名(
列名列类型,
列名列类型,
列名列类型
)

alter table 表名
modify列名 列新的类型
alter table表名
rename to 新名

修改数据

*UPDATE 表名 SET列名1=列值1,列名2=列值2.…[WHERE条件]
*条件(条件可选的):

条件必须是一个boolean类型的值或表达式:UPDATE t_person SET gender='男’age=age+1 WHERE sid='1;
运算符:=、l=、<>、>、<、>=、<=、BETWEEN.…AND、IN…)、IS NULL、NOT、OR、AND
WHEREage>=18 AND age<=80
WHERE age BETWEEN 18 AND 80
WHERE name=‘zhangSan’OR name=‘lisi’
WHERE name IN("zhangSan’,'liSi)
WHERE age IS NULL,不能使用等号
WHERE age IS NOT NULL

删除表

DELETE FROM 表名[WHERE 条件]

字符串类型只能使用单引号不能使用双引号

用户控制

1.创建用户

*CREATE USER 用户名@IP地址 IDENTIFIED BY 密码;
用户只能在指定的IP地址上登录
*CREATE USER用户名@”%’ IDENTIFIED BY 密码;
用户可以在任意IP地址上登录

2.给用户搜权

·GRANT 权限1,.…,权限n ON数据库.*TO用户名@IP地址
权限、用户、歇据库
给用户分派在指定的数据库上的指定的权限
例如:GRANT CREATE,ALTER,DROPRINSERT,UPDATE,DELETE,SELECT ON mydb1.*TO user1@localhost;
*给user1用户分派在mydb1数据库上的create,alter.drop、insert.update、delete.select权限
*GRANT ALL ON 数据库.*TO 用户名@IP地址:
给用户分派指定数据库上的所有权限

3.撤销授权

*REVOKE 权限1,…,权限n ON 数据库.*FROM 用户名@IP地址;
撤消指定用户在指定数据库上的指定权限
例如;REVOKE CREATE,ALTER,DROP ON mydb1.*FROM user1@localhost;
*撤消user1用户在mydb1数据库上的create、alter、drop权限

4.查看权限

*SHOW GRANTS FOR 用户名@IP地址 查看指定用户的权限

列运算

1数量类型的列可以做加、减、乘、除运算

SELECT sal*1.5 FROM emp;
SELECT sal+comm FROM emp;

2字符串类型可以做连续运牌

SELECT CONCAT(’$’,sal)FROM emp;

3转换NULL值

有时需要把NULL转换成其它值,例如com+1000时,如果com列存在NUL值,那么NULL+1000还是NULL,而我们这时希望把NULL当前0来运算。
SELECT IFNULL(comm,0)+1000 FROM emp:
->IFNULL(comm,0):如果comm中存在NULL值,那么当成0来运障。

4给列起别名

你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列名起个别名,这样在结果集中列名就显示别名了
SELECT IFNULL(comm,0)+1000 AS 奖金 FROM emp;一>其中AS可以省略

查询**************/*******

字符串匹配

SELECT * FROM emp WHERE ename LIKE ‘张%’;
->其中%匹配0~N个任意字符,所以上面语句查询的是姓张的所有员工。
SELECT * FROM emp WHERE ename LIKE '%阿%;
->干万不要认为上面语句是在查询姓名中间带有阿字的员工,因为%匹配0~N个字符,所以姓名以阿开头和结尾的员工也都会查询到。
SELECT * FROM emp WHERE ename LIKE ‘%’;
->这个条件等同于不存在,但如果姓名为NULL的查询不出来!

条件控制

1)条件查询

与前面介绍的UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE子句来控制i
*SELECT empno,ename,sal,comm FROM emp WHERE sal >10000 AND comm
*SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 20000 AND 30000
·SELECT empno,ename,job FROM emp WHERE job IN(经理,‘重事长);

2)模糊查询

当你想查询姓张,并且姓名一共两个字的员工时,这时就可以使用模糙查询
SELECT * FROM emp HERE ename LIKE '张_;
模糊查询需要使用运算符:LIKE,其中_匹配一个任意字符,注意,只匹配一个字符而
上面语句查询的是姓张,名字由两个字组成的员工,
SELECT * FROM emp WHERE ename LIKE ‘___’:/“姓名由3个字组成的员工*/
如果我们想查询姓张,名字是几个字都可以的员工时就要使用“%”了。

排序

1)升序

SELECT * FROM emp ORDER BY sal;
->按sal排序,升序,其中ASC是可以省略的

2)降序

SELECT * FROM WHERE emp ORDER BY comm DESC;
->按comm排序,降序!->其中DESC不能省略

3)使用多列作为排序条件

SELECT*FROM WHERE emp ORDER BY sal ASC,comm DESC;

使用sal升序排,如sal相同时,使用comm的降序排

纵向运算

1)COUNT SELECT(*) FROM emp;计算emp表中所有列都不为NULL的记录的行数

SELECT COUNT(comm)FROM emp;云计第emp表中comm列不为NULL的记录的行数

2)MAX SELECT MAX(sal)FROM emp;查询最高工资
3)MIN SELECT MIN(sal)FROM emp;查询最低工资
4)SUM SELECT SUM(Sal)FROM emp;查询工资合
5) AVG SELECT AVG(Sal)FROM emp:查询平均工资

SQL注入的条件

1、输入的数据是可控的

2、你输入的数据,是要被代入到数据库进行查询的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值