SQL注入:

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

假如存在一张表t_user,

sql = "select * from t_user where username='zs' and password='123456'";
String name = "zs' or true # "
sql = "select * from t_user where username='"+ name + "'"
sql = "select * from t_user where username='zs' or true # ' and password='123456'";
zs' or true #

索引(index):

什么是索引:

是一种数据库对象,用来加快查询速度和效率的数据对象

索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。

MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。

Netsparker 针对sql注入 in sql注入_表名

索引优缺点:

可以提高检索数据的速度,这是创建索引的最主要的原因

索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加;索引需要占用物理空间,每一个索引要占一定的物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了

MySQL的底层索引式二叉树

int语句默认情况下不使用索引:

例如:select * from score where id in(1,2,3,)

int类型的主键索引默认使用升序

索引分类:

普通索引、主键索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等

索引的设计原则:

1.选择惟一性索引

2.为经常需要排序、分组和联合操作的字段建立索引

3.为常作为查询条件的字段建立索引

4.限制索引的数目

5.尽量使用数据量少的索引

6.尽量使用前缀来索引

7.删除不再使用或者很少使用的索引

创建索引:

创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有三种方式,这三种方式分别是创建表的时候创建索引、在已经存在的表上创建索引和使用ALTER TABLE语句来创建索引。

三种方式:

1.在创建表的时候:

创建表的时候可以直接创建索引,这种方式最简单、方便。其基本形式如下:

create table 表名(属性名 数据类型 [完整性约束条件],

......

属性名 数据类型

[unique | fulltext | spatial ] index | key

[别名](属性名1[(长度)] [asc | desc])    ------int类型可以不用写长度

);

UNIQUE:可选。表示索引为唯一性索引。

FULLTEXT:可选。表示索引为全文索引。

SPATIAL:可选。表示索引为空间索引。

INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是    一样的。

索引名:可选。给创建的索引取一个新名称。

字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。

长度:可选。指索引的长度,必须是字符串类型才可以使用。

ASC:可选。表示升序排列。

DESC:可选。表示降序排列

2.表存在的时候,使用create:

create index 索引名称 on tablename(列名称(类型长度));

Netsparker 针对sql注入 in sql注入_表名_02

3.表存在,通过alter table 创建索引:

在已经存在的表上,可以通过alter table 语句直接为表上的一个或几个字段创建索引,基本形式如下:

alter table 表名 add [unique | fulltext |spatial ]

index 索引名(属性[长度]) [asc | desc]);

Netsparker 针对sql注入 in sql注入_数据_03

查询索引:

show index from 表名称 [from db_name];

查询索引的执行情况:

explain select * from t_hero where id=1;

删除索引:

删除索引是指将表中已经存在的索引删除掉。一些不再使用的索引会降低表的更新速度,影响数据库的性能。对于这样的索引,应该将其删除。

drop index 索引名 on 表名;

Netsparker 针对sql注入 in sql注入_数据_04