sql注入相关

一、注释方式

1.- -+可注释之后的内容,不过- -和注释内容之间要有一个空格,+号可代替空格。
2./* 注释*/
3.#注释

二、几个函数

  • concat(str1, str2,…):连接多个字符串
  • concat_ws(separator, str1, str2, …):连接多个字符串,可以指定分隔符。
  • group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )

二、绕过空格方式

1./*注释*/可以绕过空格
2.任意可以计算出结果的语句都可以用括号括起来,且括号两端可以没有多余的空格
select user() from dual where 1=1 and 2=2可以这样绕过空格:
select(user())from dual where(1=1)and(2=2)

三、mysql预编译

给服务器发送一条sql语句,服务器总是需要检验sql语句的语法格式是否正确,然后再把sql语句编译成可执行的函数,对于有些只是参数不同而重复执行的sql语句来说这样就耗费了过多的时间,预编译就只对sql语句进行一次语法校验和编译,效率更高。
步骤:

  • 执行预编译语句
    如:prepare sample from 'select * from student where name=?'
  • 设置变量
    如:set @str='zhang'
  • 执行语句
    如:execute sample using @str
    如果需要再次执行sample语句,则不需要再编译一次了,只需要:
  • 设置变量
    如:set @str='li'
  • 执行语句
    如:execute sample using @str

四、查询数据库、表和字段操作

  • 查询当前数据库中的所有表名:
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
  • 查询表中的列名
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='secret_table'#
	group_concat()函数
	group_concat()可以将要查询字段的所有值一起查询出来,各值由分隔符隔开,默认为逗号,语法如下:
	group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
	一个例子:select id,group_concat(price order by price desc) from goods group by id;
	select id, group_concat(price separator ';') from goods group by id;
  • information_schema数据库结构
    该数据库记录了mysql服务器所有数据库的信息,如所有数据库名,数据库的表,表栏的数据类型与访问权限等。information_schema相当于一个元数据库,其中常见的表如下:
    1.SCHEMATA表:提供了有关数据库的信息。等同于show databases命令
字段名含义
SCHEMA_NAME数据库名
DEFAULT_COLLATION_NAME排序规则
DEFAULT_CHARACTER_SET_NAME字符集

     等同于show databases
     2.TABLES表:给出了关于数据库中的表的信息。等同于show tables命令

字段名含义
SCHEMA_NAME数据库名
TABLE_NAME表名
TABLE_TYPE表的类型(类型有BASE TABLE、VIEW、SYSTEM VIEW)
ENGINE存储索引
CREATE_TIME建表时间

     3.columns表:给出了表中的列信息,即字段信息。相当于show columns查看表的字段

字段名含义
SCHEMA_NAME数据库名
TABLE_NAME表名
COLUMN_NAME字段名
COLUMN_TYPE字段类型

     4.STATISTICS表
存储索引的信息。相当于show index

字段名含义
SCHEMA_NAME数据库名
TABLE_NAME表名
INDEX_SCHEMA也是数据库名
INDEX_NAME索引名
COLUMN_NAME字段名
INDEX_TYPE索引类型(一般是btree)

     5.TABLE_CONSTRAINTS表
看哪些表有哪些约束,唯一性约束、主键约束、外键约束。

字段名含义
CONSTRAINT_SCHEMA数据库名
CONSTRAINT_NAME约束名
TABLE_SCHEMA数据库名
TABLE_NAME表名
CONSTRAINT_TYPE约束类型(UNIQUE、PRIMARY KEY、FOREIGN KEY)

     6.KEY_COLUMN_USAGE表
这个表详细记录了各个表的约束情况,包括外键具体参考了哪个数据库中的哪张表。

字段名含义
CONSTRAINT_SCHEMA数据库名
CONSTRAINT_NAME约束名(PRIMARY或列名或外键名)
TABLE_SCHEMA数据库名
TABLE_NAME表名
COLUMN_NAME列名
REFERENCED_ABLE_SCHEMA参考的数据库
REFERENCED_TABLE_NAME参考的表
REFERENCED_COLUMN_NAME参考的列

     7.ROUTINES表
函数和存储过程

字段名含义
SPECIFIC_NAME程序名
ROUTINE_SEHEMA数据库名
ROUTINE_NAME程序名
ROUTINE_TYPE程序类型(procedure或function)
ROUTINE_BODY函数体
ROUTINE_DEFINITION具体的程序语句

     8.VIEWS表
查询数据库下所有的视图

字段名含义
TABLE_SCHEMA数据库名
TABLE_NAME表名
VIEW_DEFINITION视图定义语句

     9.TRIGGERS表
查询所有的触发器

字段名含义
TRIGGER_SCHEMA数据库名
TRIGGER_NAME触发器名
EVNET_OBJECECT_SCHEMA触发的数据库
EVENT_OBJECT_TABLE触发的表
ACTION_STATEMENT触发的语句
ACTION_TIMING触发时机(before或after)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值