一、SQL注入原理
SQL注入是一种常见的网络攻击技术,攻击者通过在正常的SQL语句中插入恶意的参数,从而控制数据库执行非法操作。以下是一个简单的示例:
正常SQL语句:
select * from news_users where username='admin' and password='123456';
恶意构造的SQL语句:
select * from news_users where username='' or 1=1 -- and password='12';
在上述恶意构造的语句中,'-- '
后的内容被注释,导致密码验证部分失效,从而实现万能密码登录。
二、SQL常用语句
-
查看服务器数据库
show databases;
-
查看数据库表名
show tables;
-
查看数据库内容
select * from table_name;
-
查看数据库字段
desc table_name;
三、特殊运算符
in(x,y,z)
:在xyz中not in(x,y,z)
:不在xyz中
四、字符串函数
-
统计字符串长度
select length('qwe王'); -- 结果:6(中文长度为3)
-
截取字符
select substr('hello世界',6,2); -- 结果:世界
-
左/右截取
select left('hello世界',5); -- 结果:hello
select right('hello世界',2); -- 结果:世界
-
字符连接
select concat('hello',' ','world!'); -- 结果:hello world!
-
同字段所有数据拼接
select group_concat(username) from pikachu.member;
-- 结果:vince,allen,kobe,grady,kevin,lucy,lili
-
将字符串第一个字符转换成ascii码
select ascii(substr('12as王',1,1)); -- 结果:49
-
十进制转换十六进制
select hex(ord(substr('12as王',1,1))); -- 结果:31
五、数据库信息函数
-
返回当前数据库版本
select version();
-
查看当前工作数据库
use pikachu;
select database(); -- 结果:pikachu
-
查看当前使用用户
select user();
-
查看数据库存储路径
select @@datadir;
六、高级函数
-
IF函数
select IF(1>2,1,2); -- 结果:2
-
休眠函数
select sleep(5);
-
随机数函数
select rand();
-
读取服务器中的文件
select load_file('C:/phpStudy/hello.txt');
注意:使用load_file
函数需要配置文件secure_file_priv=''
。
七、元数据库(information_schema)
tables 表:table_schema存放数据库名 table_name存放表名
columns表:table_schema存放数据库名 table_name存放表名 conlumn_name存放字段
使用例子:
use information_schema;
//查找拥有的库
select distinct table_schema from tables;
//查找拥有库中的表
select table_name from tables where table_schema='pikachu';
//查找表中拥有的字段
select column_name from columns where table_schema='pikachu' and table_name='users';
查询结果重复字段过多可使用:distinct进行过滤