91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux之mysql數據庫搭建及sql注入和防御

發布時間:2020-04-22 13:24:53 來源:網絡 閱讀:3093 作者:wt7315 欄目:數據庫



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

sql注入各種姿勢:http://wt7315.blog.51cto.com/10319657/1828167

sqlmap注入神器詳解:http://wt7315.blog.51cto.com/10319657/1841241


數據庫分為三種基本形式 : (其實這些都是眾所周知的,只是為了知識的完整性,簡單的帶過)

關系型數據庫

層次型數據庫

網狀型數據庫


運行在Linux系統上的關系型數據庫管理系統主要產品:

企業級服務器:OracleSybaseDB2

中小型服務器:MySQLPostgreSQL

 

一、MySQL簡介和安裝

總體來說,MySQL數據庫管理系統具有以下主要特點:

①可以運行在不同平臺上,支持多用戶、多線程和多CPU,沒有內存溢出漏洞;

②提供多種數據類型,支持ODBCSSL、支持多種語言利用MySQLAPI進行開發;

③是目前市場上現有產品中運行速度最快的數據庫系統;

④同時訪問數據庫的用戶數量不受限制;

⑤可以保存超過50,000,000條記錄;

⑥用戶權限設置簡單、有效。

 

 

查看系統中是否已安裝mysql軟件,若無任何顯示表明未安裝。

rpm -qa  *mysql*


 

DVD安裝光盤放入光驅,并將光驅掛載到/mnt目錄中。

mount  /dev/cdrom  /mnt


由于此主機既作為服務器端又作為客戶端,這里先安裝MySQL的客戶端安裝包,該安裝包的依賴軟件包是perl-DBIMySQL的服務端安裝包還要依賴perl-DBD-MySQL軟件包


linux之mysql數據庫搭建及sql注入和防御


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。



linux之mysql數據庫搭建及sql注入和防御


登錄及退出MySQL環境
mysql -h 主機名或IP地址  -u 用戶名  -p 用戶密碼


 

linux之mysql數據庫搭建及sql注入和防御


接下來就是數據庫的知識了



二、數據庫管理

 

MySQL命令

功能

show  databases;

查看服務器中當前有哪些數據庫

use  數據庫名;

選擇所使用的數據庫

create database 數據庫名;

創建數據庫

drop database 數據庫名;

刪除指定的數據庫

 

mysql安裝后默認會創建三個數據庫information_schemamysqltest, 其中名為“mysql”的數據庫很重要,它里面保存有MYSQL的系統信息,用戶修改密碼和新增用戶,實際上就是針對該數據庫中的有關數據表進行操作。

linux之mysql數據庫搭建及sql注入和防御


 

看到information_schema,玩過mysql的手工注入的童鞋是不是很親切了

 

 

三、數據表結構管理

MySQL命令

功能

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

在當前數據庫中創建數據表

show  tables;

顯示當前數據庫中有哪些數據表

describe  [數據庫名.]表名;

顯示當前或指定數據庫中指定數據表的結構(字段)信息

drop table [數據庫名.]表名;

drop table [數據庫名.]表名;

 

 

創建表的時候必須至少有一個列

linux之mysql數據庫搭建及sql注入和防御


四、記錄的查看、插入、修改與刪除



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。

linux之mysql數據庫搭建及sql注入和防御


將wt庫wt表中的id列的字段更新為117.

linux之mysql數據庫搭建及sql注入和防御



五、用戶與權限管理


創建與授權用戶 grant  權限列表 on 數據庫名.表名 to 用戶名@來源地址 [identified by ‘密碼’]



                主要用戶權限

select

讀取表的數據

insert

向表中插入數據

update

更新表中的數據

delete

刪除表中的數據

index

創建或刪除表的索引

create

創建新的數據庫和表

alter

修改表的結構

grant

將自己擁有的某些權限授予其他用戶

drop

刪除現存的數據庫和表

file

在數據庫服務器上讀取和寫入文件

reload

重新裝載授權表

process

查看當前執行的查詢

shutdown

停止或關閉mysql服務

all

具有全部權限

 

1.增加一個名為testMySQL用戶,允許其從本地主機(MySQL數據庫所在的主機)上登錄,且只能對數據庫student進行查詢,用戶密碼設置為123456


linux之mysql數據庫搭建及sql注入和防御


驗證該用戶能進行登錄、查詢,無法做其他操作,和預想的是一樣的。

linux之mysql數據庫搭建及sql注入和防御


2.查看用戶的權限

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


linux之mysql數據庫搭建及sql注入和防御


3.撤銷用戶的權限

revoke  權限列表  on 數據庫名.表名  from  用戶名@域名或IP地址;


linux之mysql數據庫搭建及sql注入和防御



六、數據庫的備份與恢復

 

(1).直接備份數據庫所在的目錄

使用cptar等命令直接備份數據庫所存放的目錄

2.使用mysqldump命令備份和恢復

mysqldump -u 用戶名 -p [密碼] [選項] [數據庫名] [表名] > /備份路徑/備份文件名


 

linux之mysql數據庫搭建及sql注入和防御


附: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 [數據庫名] < /備份路徑/備份文件名


linux之mysql數據庫搭建及sql注入和防御


七、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被執行前,檢查確保變量idint類型;如果是接受郵箱,那就應該檢查并嚴格確保變量一定是郵箱的格式,其他的類型比如日期、時間等也是一個道理。總結起來:只要是有固定格式的變量,在SQL語句執行前,應該嚴格按照固定格式去檢查,確保變量是我們預想的格式,這樣很大程度上可以避免SQL注入***。

 

2、過濾特殊符號

 

對于無法確定固定格式的變量,一定要進行特殊符號過濾或轉義處理。以PHP為例,通常是采用addslashes函數,它會在指定的預定義字符前添加反斜杠轉義,這些預定義的字符是:單引號 (') 雙引號 (") 反斜杠 (\) NULL

 

3、綁定變量,使用預編譯語句

 

MySQLmysqli驅動提供了預編譯語句的支持,不同的程序語言,都分別有使用預編譯語句的方法


4.數據庫信息加密安全

Web開發中,傳統的加解密大致可以分為三種:

 

1、對稱加密:即加密方和解密方都使用相同的加密算法和密鑰,這種方案的密鑰的保存非常關鍵,因為算法是公開的,而密鑰是保密的,一旦密匙泄露,***仍然可以輕易解密。常見的對稱加密算法有:AESDES等。

 

2、非對稱加密:即使用不同的密鑰來進行加解密,密鑰被分為公鑰和私鑰,用私鑰加密的數據必須使用公鑰來解密,同樣用公鑰加密的數據必須用對應的私鑰來解密,常見的非對稱加密算法有:RSA等。

 

3、不可逆加密:利用哈希算法使數據加密之后無法解密回原數據,這樣的哈希算法常用的有:md5SHA-1等。

 

sql防御總結

1、不要隨意開啟生產環境中Webserver的錯誤顯示。

2、永遠不要信任來自用戶端的變量輸入,有固定格式的變量一定要嚴格檢查對應的格式,沒有固定格式的變量需要對引號等特殊字符進行必要的過濾轉義。

3、使用預編譯綁定變量的SQL語句。

4、做好數據庫帳號權限管理。

5、嚴格加密處理用戶的機密信息。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扶绥县| 云阳县| 肇源县| 普安县| 隆化县| 常山县| 和田市| 陵水| 成武县| 沈阳市| 龙州县| 龙游县| 子洲县| 黄浦区| 翁源县| 临夏市| 邯郸市| 吉水县| 乐业县| 黄陵县| 汽车| 林甸县| 牙克石市| 胶南市| 呼和浩特市| 阿拉善盟| 邢台市| 肇州县| 航空| 镇坪县| 隆回县| 兴隆县| 成都市| 依安县| 瓮安县| 三门县| 茂名市| 锦州市| 汉源县| 新巴尔虎右旗| 德令哈市|