linux之mysql数据库建立及sql注入和防护51CTO博客 - 亚美娱乐

linux之mysql数据库建立及sql注入和防护51CTO博客

2019年03月04日10时26分03秒 | 作者: 范明 | 标签: 数据库,数据,注入 | 浏览: 336



mysql中文手册下载地址:http://down.51cto.com/data/2244392

sql注入各种姿态:

sqlmap注入神器详解:


数据库分为三种基本方式 : (其实这些都是众所周知的,仅仅为了常识的完整性,简略的带过)

联系型数据库

层次型数据库

网状型数据库


运转在Linux体系上的联系型数据库办理体系首要产品:

企业级效劳器:Oracle、Sybase、DB2

中小型效劳器:MySQL、PostgreSQL

 

一、MySQL简介和装置

整体来说,MySQL数据库办理体系具有以下首要特点:

①能够运转在不同平台上,支撑多用户、多线程和多CPU,没有内存溢出缝隙;

②供给多种数据类型,支撑ODBC、SSL、支撑多种言语运用MySQL的API进行开发;

③是现在市场上现有产品中运转速度最快的数据库体系;

④一起拜访数据库的用户数量不受约束;

⑤能够保存逾越50,000,000条记载;

⑥用户权限设置简略、有用。

 

 

查看体系中是否已装置mysql软件,若无任何显现标明未装置。

rpm -qa  *mysql*


 

将DVD装置光盘放入光驱,并将光驱挂载到/mnt目录中。

mount  /dev/cdrom  /mnt


由于此主机既作为效劳器端又作为客户端,这儿先装置MySQL的客户端装置包,该装置包的依靠软件包是perl-DBI。MySQL的效劳端装置包还要依靠perl-DBD-MySQL软件包



MySQL效劳的发动、中止、重启和查询发动状况
service  mysqld start|stop|restart|status

2.设置开机主动发动的功用
chkconfig  level  35  mysqld  on


3.设置MySQL数据库root账号的暗码
mysqladmin  -u 用户名  [-h 效劳器主机名或IP地址] [-p]  password  新口令
 
root用户默许的空口令,先将root用户的暗码设置为123,再将用户root的暗码改为456。




登录及退出MySQL环境
mysql -h 主机名或IP地址  -u 用户名  -p 用户暗码


 


接下来就是数据库的常识了



二、数据库办理

 

MySQL指令

功用

show  databases;

查看效劳器中当时有哪些数据库

use  数据库名;

挑选所运用的数据库

create database 数据库名;

创立数据库

drop database 数据库名;

删去指定的数据库

 

mysql装置后默许会创立三个数据库information_schema、mysql和test, 其间名为“mysql”的数据库很重要,它里边保存有MYSQL的体系信息,用户修正暗码和新增用户,实际上就是针对该数据库中的有关数据表进行操作。


 

看到information_schema,玩过mysql的手艺注入的童鞋是不是很亲热了

 

 

三、数据表结构办理

MySQL指令

功用

create table 表名 (字段设定列表);

在当时数据库中创立数据表

show  tables;

显现当时数据库中有哪些数据表

describe  [数据库名.]表名;

显现当时或指定数据库中指定数据表的结构(字段)信息

drop table [数据库名.]表名;

drop table [数据库名.]表名;

 

 

创立表的时分有必要至少有一个列


四、记载的查看、刺进、修正与删去



MySQL指令

功用

insert into 表名(字段1,字段2,……) values(字段1的值, 字段2的值,……);

向数据表中刺进新的记载

update 表名 set 字段名1=字段值1[,字段名2=字段值2]  where 条件表达式;

 

修正、更新数据表中的记载

 

select 字段名1,字段名2……from 表名 where 条件表达式;

 

从数据表中查找契合条件的记载

 

select * from 表名;

 

显现当时数据库的表中的记载

 

delete from 表名 where 条件表达式;

 

在数据表中删去指定的记载

 

delete from 表名;

 

将当时数据库表中记载清空



向wt库wt表中刺进id列,字段为17。


将wt库wt表中的id列的字段更新为117.



五、用户与权限办理


创立与授权用户 grant  权限列表 on 数据库名.表名 to 用户名@来历地址 [identified by ‘暗码’]



                首要用户权限

select

读取表的数据

insert

向表中刺进数据

update

更新表中的数据

delete

删去表中的数据

index

创立或删去表的索引

create

创立新的数据库和表

alter

修正表的结构

grant

将自己具有的某些权限颁发其他用户

drop

删去现存的数据库和表

file

在数据库效劳器上读取和写入文件

reload

从头装载授权表

process

查看当时履行的查询

shutdown

中止或封闭mysql效劳

all

具有悉数权限

 

1.增加一个名为test的MySQL用户,答应其从本地主机(即MySQL数据库地点的主机)上登录,且只能对数据库student进行查询,用户暗码设置为123456。



验证该用户能进行登录、查询,无法做其他操作,和料想的是相同的。


2.查看用户的权限

show  grants  for  用户名@域名或IP地址;



3.吊销用户的权限

revoke  权限列表  on 数据库名.表名  from  用户名@域名或IP地址;




六、数据库的备份与康复

 

(1).直接备份数据库地点的目录

运用cp、tar等指令直接备份数据库所寄存的目录

2.运用mysqldump指令备份和康复

mysqldump -u 用户名 -p [暗码] [选项] [数据库名] [表名] > /备份途径/备份文件名


 


附:mysqldump的几种常用办法:

 

(1)导出整个数据库(包括数据库中的数据)

mysqldump -u username -p dbname > dbname.sql    

 

(2)导出数据库结构(不含数据)

mysqldump -u username -p -d dbname > dbname.sql    

 

(3)导出数据库中的某张数据表(包括数据)

 mysqldump -u username -p dbname tablename > tablename.sql    

 

(4)导出数据库中的某张数据表的表结构(不含数据)

mysqldump -u username -p -d dbname tablename > tablename.sql  

 

常用参数阐明:

all-databases——备份效劳器中的一切数据库内容;

opt——对备份进程进行优化,此项为默许选项

 

 

 

(2.)康复(导入)数据

mysql -u root -p [数据库名] < /备份途径/备份文件名



七、sql注入



SQL注入发生的原因,和栈溢出、XSS等许多其他的***办法相似,就是未经查看或许未经充沛查看的用户输入数据,意外变成了代码被履行。针关于SQL注入,则是用户提交的数据,被数据库体系编译而发生了开发者预期之外的动作。也就是,SQL注入是用户输入的数据,在拼接SQL句子的进程中,逾越了数据自身,成为了SQL句子查询逻辑的一部分,然后这样被拼接出来的SQL句子被数据库履行,发生了开发者预期之外的动作。

所以从根本上防止上述类型***的手法,仍是防止数据变成代码被履行,时刻辨明代码和数据的边界。而具体到SQL注入来说,被履行的恶意代码是经过数据库的SQL解说引擎编译得到的,所以只需防止用户输入的数据被数据库体系编译就能够了。

 

现在的数据库体系都供给SQL句子的预编译(prepare)和查询参数绑定功用,在SQL句子中放置占位符?,然后将带有占位符的SQL句子传给数据库编译,履行的时分才将用户输入的数据作为履行的参数传给用户。这样的操作不只使得SQL句子在书写的时分不再需求拼接,看起来也更直接,而且用户输入的数据也没有机会被送到数据库的SQL解说器被编译履行,也不会越权变成代码。

 

 

怎么断定SQL注入缝隙

经过以上的实例,咱们依然还会有疑问:***并不知道咱们程序代码的逻辑和SQL句子的写法,他是怎么断定一个网站是否存在SQL注入缝隙呢?一般说来有以下2种途径:

 

1、过错提示

 

假如方针Web网站敞开了过错显现,***者就能够经过重复调整发送的参数、查看页面打印的过错信息,推测出Web网站运用的数据库和开发言语等重要信息。

 

2、盲注

 

除非运维人员忽略,不然大部分的Web运营网站应该都封闭了过错提示信息,此刻***者一般会选用盲注的技巧来进行重复的测验判别。


之前对sql手艺注入和sql注入神器sqlmap做过很具体的介绍,这儿就针对sql注入的理论做弥补。具体的sql注入姿态请查看前面的文章。


防护SQL注入

关于效劳器装备层面的防备,应该保证出产环境的Webserver是封闭过错信息的,比方PHP在出产环境的装备文件php.ini中的display_errors应该设置为Off,这样就封闭了过错提示,下面咱们更多的从编码的视点来看看怎么防备SQL注入。

 

凡是有SQL注入缝隙的程序,都是由于程序要承受来自客户端用户输入的变量或URL传递的参数,而且这个变量或参数是组成SQL句子的一部分,关于用户输入的内容或传递的参数,咱们应该要时刻保持警惕,这是安全范畴里的「外部数据不行信赖」的准则,纵观Web安全范畴的各种***办法,大多数都是由于开发者违反了这个准则而导致的,所以天然能想到的,就是从变量的检测、过滤、验证下手,保证变量是开发者所料想的。

 

1、查看变量数据类型和格局

 

假如你的SQL句子是相似where id={$id}这种方式,数据库里一切的id都是数字,那么就应该在SQL被履行前,查看保证变量id是int类型;假如是承受邮箱,那就应该查看并严厉保证变量一定是邮箱的格局,其他的类型比方日期、时刻等也是一个道理。总结起来:只需是有固定格局的变量,在SQL句子履行前,应该严厉依照固定格局去查看,保证变量是咱们料想的格局,这样很大程度上能够防止SQL注入***。

 

2、过滤特别符号

 

关于无法断定固定格局的变量,一定要进行特别符号过滤或转义处理。以PHP为例,通常是选用addslashes函数,它会在指定的预界说字符前增加反斜杠转义,这些预界说的字符是:单引号 () 双引号 (") 反斜杠 (\) NULL。

 

3、绑定变量,运用预编译句子

 

MySQL的mysqli驱动供给了预编译句子的支撑,不同的程序言语,都别离有运用预编译句子的办法


4.数据库信息加密安全

在Web开发中,传统的加解密大致能够分为三种:

 

1、对称加密:即加密方和解密方都运用相同的加密算法和密钥,这种计划的密钥的保存十分要害,由于算法是揭露的,而密钥是保密的,一旦密匙走漏,***依然能够容易解密。常见的对称加密算法有:AES、DES等。

 

2、非对称加密:即运用不同的密钥来进行加解密,密钥被分为公钥和私钥,用私钥加密的数据有必要运用公钥来解密,相同用公钥加密的数据有必要用对应的私钥来解密,常见的非对称加密算法有:RSA等。

 

3、不行逆加密:运用哈希算法使数据加密之后无法解密回原数据,这样的哈希算法常用的有:md5、SHA-1等。

 

sql防护总结

1、不要随意敞开出产环境中Webserver的过错显现。

2、永久不要信赖来自用户端的变量输入,有固定格局的变量一定要严厉查看对应的格局,没有固定格局的变量需求对引号等特别字符进行必要的过滤转义。

3、运用预编译绑定变量的SQL句子。

4、做好数据库帐号权限办理。

5、严厉加密处理用户的秘要信息。


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章