十一、mysql輸入安全,mysql
1.盡量使用“綁定參數”功能,php中可用pdo進行一系列操作
2.php可使用mysql_real_escape_string()函數進行輸入過濾;
怎對MySQL服務器進行安全的配置?
因
Chroot
原因
配置文件也會有所差異
假
實際操作
遇
相似
情況
卻
知道對其
何正確
解決
下
文章對
而言
定
良師益友
1.關閉遠程連接 首先
應該關閉3306端口
MySQL
默認監聽端口
由於此處MySQL只服務於本地腳本
所
需要遠程連接
盡管MySQL內建
安全機制
嚴格
監聽
TCP端口仍
危險
行
因
MySQL程序本身有問題
未授權
訪問完全
繞過MySQL
內建安全機制
關閉網絡監聽
方法
簡單
/chroot/mysql/etc/my.cnf文件
[mysqld]部分
去掉#skip-networking前面
#
即
關閉了網絡
本地程序
何連接MySQL數據庫呢
本地程序
通過mysql.sock來連接
速度比網絡連接更快
文
提
關於mysql.sock
具體情況
MySQL
備份通常使用SSH來執行
2.禁止MySQL導入本地文件 下面
禁止MySQL
用
LOAD DATA LOCAL INFILE
命令
命令會利用MySQL把本地文件讀
數據庫
用戶
非法獲取敏感信息了
了禁止上述命令
/chroot/mysql/etc/my.cnf文件
[mysqld]部分加入下面語句:set-variable=local-infile=0
了管理方便
般
系統
MySQL管理命令
mysql、mysqladmin、mysqldump等
使用
都
系統
/etc/my.cnf文件
要連接
會尋找/tmp/mysql.sock文件來試圖連接MySQL服務器
裡要連接
chroot下
MySQL服務器
解決辦法有兩
:
管理命令
面加入--socket=/chroot/mysql/tmp/mysql.sock
例
:#/usr/local/mysql/bin/mysql -root -p --socket=/chroot/mysql/tmp/mysql.sock 另
/etc/my.cnf
[client]部分加入socket=/chroot/mysql/tmp/mysql.sock
顯
第二種方法方便多了
3.修改MySQL
root用戶ID和密碼#chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld & #/usr/local/mysql/bin/mysql -uroot ....... mysql>SET PASSWORD FOR root@localhost=PASSWORD('new_password'); 要盡量養成
mysql下輸入密碼
習慣
因
Shell下面輸入
時候
能會被其
人看見
mysql>use mysql; mysql>update user set user="wghgreat" where user="root"; mysql>select Host,User,Password,Select_priv,Grant_priv from user; mysql>delete from user where user=''; mysql>delete from user where password=''; mysql>delete from user where host='%'; mysql>drop database test; 修改
容易猜
ID:mysql>flush privileges; mysql>quit; 4.刪除歷史命令記錄
些歷史文件包括~/.bash_history、~/.mysql_history等
打開
們
會大吃
驚
居
有
些明文
密碼
裡
#cat /dev/null > ~/.bash_history #cat /dev/null > ~/.mysql_history PHP和MySQL通信 默認情況下
PHP會通過/tmp/mysql.sock來和MySQL通信
裡
大問題
MySQL生成
根本
而
/chroot/mysql/tmp/mysql.sock
解決
辦法
做
連接:#ln /chroot/mysql/tmp/mysql.sock /tmp/mysql.sock 注意:由於hard links
能
文件系統
分區之間做
所
該處
連接必須位於同
分區內部
怎設置Mysql數據庫的安全
用
shell>chown -R mysql.mysql /usr/local/mysql/var
shell>chmod -R go-rwx /usr/local/mysql/var
改動
shell>ls -l /usr/local/mysql
total 40
drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin
drwxrwxr-x 3 root root 4096 Feb 27 20:07 include
drwxrwxr-x 2 root root 4096 Feb 27 20:07 info
drwxrwxr-x 3 root root 4096 Feb 27 20:07 lib
drwxrwxr-x 2 root root 4096 Feb 27 20:07 libexec
drwxrwxr-x 3 root root 4096 Feb 27 20:07 man
drwxrwxr-x 6 root root 4096 Feb 27 20:07 mysql-test
drwxrwxr-x 3 root root 4096 Feb 27 20:07 share
drwxrwxr-x 7 root root 4096 Feb 27 20:07 sql-bench
drwx------ 4 mysql mysql 4096 Feb 27 20:07 var
shell>ls -l /usr/local/mysql/var
total 8
drwx------ 2 mysql mysql 4096 Feb 27 20:08 mysql
drwx------ 2 mysql mysql 4096 Feb 27 20:08 test
shell>ls -l /usr/local/mysql/var/mysql
total 104
-rw------- 1 mysql mysql 0 Feb 27 20:08 columns_priv.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 columns_priv.MYI
-rw------- 1 mysql mysql 8778 Feb 27 20:08 columns_priv.frm
-rw------- 1 mysql mysql 302 Feb 27 20:08 db.MYD
-rw------- 1 mysql mysql 3072 Feb 27 20:08 db.MYI
-rw------- 1 mysql mysql 8982 Feb 27 20:08 db.frm
-rw------- 1 mysql mysql 0 Feb 27 20:08 func.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 func.MYI
-rw------- 1 mysql mysql 8641 Feb 27 20:08 func.frm
-rw------- 1 mysql mysql 0 Feb 27 20:08 host.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 host.MYI
-rw------- 1 mysql mysql 8958 Feb 27 20:08 host.frm
-rw------- 1 mysql mysql 0 Feb 27 20:08 tables_priv.MYD
-rw------- 1 mysql mysql 1024 Feb 27 20:08 tables_priv.MYI
-rw------- 1 mysql mysql 8877 Feb 27 20:08 tables_priv.frm
-rw------- 1 mysql mysql 428 Feb 27 20:08 user.MYD
-rw------- 1 mysql mysql 2048 Feb 27 20:08 user.MYI
-rw------- 1 mysql mysql 9148 Feb 27 20:08 user.frm
用root用戶啟動遠程服務
直
安全大忌
因
服務程序出現問題
遠程攻擊者極有
能獲得主機
完全控制權
MySQL從3.23.15版本開始時作了小小
改動
默認安裝
服務要用mysql用戶來啟動
允許root用戶啟動
非要用root用戶來啟動
必須加上-user=root
參數(./safe_mysqld -user=root &)
因
MySQL
有LOAD DATA INFILE和SELECT ... INTO OUTFILE
SQL語句
root用戶啟動了MySQL服務器
數據庫用戶
擁有了root用戶
寫權限
過MySQL還
做了
些限制
比
LOAD DATA INFILE只能讀全局
讀
文件
SELECT ... INTO OUTFILE
能覆蓋已經存
文件
本地
日志文件也
能忽視
包括shell
日志和MySQL自己
日志
有些用戶
本地登陸或備份數據庫
時候
了圖方便
有時會
命令行參數裡直接帶了數據庫
密碼
:
shell>/usr/local/mysql/bin/mysqldump -uroot -ptest test>test.sql
shell>/usr/local/mysql/bin/mysql -uroot -ptest
些命令會被shell記錄
歷史文件裡
比
bash會寫入用戶目錄
.bash_history文件
些文件
慎被讀
數據庫
密碼
會洩漏
用戶登陸數據庫
執行
SQL命令也會被MySQL記錄
用戶目錄
.mysql_history文件裡
數據庫用戶用SQL語句修改了數據庫密碼
也會因.mysql_history文件而洩漏
所
我們
shell登陸及備份
時候
要
-p
直接加密碼
而
提示
再輸入數據庫密碼
另外
兩
文件我們也應該
讓
記錄我們
操作
防萬
shell>rm .bash_history .mysql_history
shell>ln -s /dev/null .bash_history
shell>ln -s /dev/null .mysql_history
上門
兩條命令把
兩
文件鏈接
/dev/null
我們
操作
會被記錄
兩
文件裡了
數據庫系統由
系列數據庫組成
每
數據庫包含
系列數據庫表
MySQL
用數據庫名
數據目錄建立建立
數據庫目錄
各數據庫表分別
數據庫表名作
文件名
擴展名分別
MYD、MYI、frm
三
文件放
數據庫目錄
MySQL
授權表給數據庫
訪問提供了靈活
權限控制
本地用戶擁有對庫文件
讀權限
攻擊者只需把數據庫目錄打包拷走
拷
自己本機
數據目錄下
能訪問竊取
數據庫
所
MySQL所
主機
安全性
首要
問題
其次
數據目錄和數據文件
安全性
也
權限設置問題