數據庫與服務器安全選項拾遺
之前總結過sql注入的一些特征。這里總結一下數據庫的內部特征。和安全選項。
權限劃分
mysql用戶的權限,大體來說比較簡單,分別存儲于這幾個表中
mysql.User,mysql.db,mysql.Host,mysql.table_priv,mysql.column_priv |
因為存取頻繁,所以這幾個表的數據存在內存中,更新數據后使用,語句來進行內存更新
當然執行這個命令需要reload權限
FLUSH PRIVILEGES |
用戶登錄時需檢查,mysql.user中的user host pass 三個字段,如果允許任何主機外部鏈接可以吧host設置成%
用戶登錄通過后,mysql會自上而下的檢查用戶權限,首先在mysql.user中讀取對應用戶的權限。
其中關于用戶權限的字段大概有這些,除去一些常規的不表,比較重要的是
file_priv 這個影響到了mysql讀寫文件的利用
grant_priv 的用戶可以吧自己擁有的權限付給其他用戶
process_priv 的用戶可以通過SHOW PROCESSLIST查詢所用用戶的查詢進程并kill,普通用戶只可以查詢自己的
super_priv的用戶允許改變set變量,修改用戶查詢
Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv |
另外 super file 等管理權限后面不能加數據庫,只能以這種形式授權
grant super on *.* to xxx@xxxxx;
而select等增刪改查的權限,可以指定數據庫來添加
grant select on pyt.* to ‘p1′@’localhost’;
其中最低的權限是usage權限,相當于只有一個連接的權限。使用create user 建立的用戶,默認為usage權限
但是此權限貌似有information_schema表的select權限,其中host為允許連接的主機名
CREATE USER 'username'@'host' IDENTIFIED BY 'password'
查詢一個用戶的權限只需要
CREATE USER 'username'@'host' IDENTIFIED BY 'password'
安全選項
mysql啟動的時候,也有一些安全選項,可以起到提高mysql安全性的功能
具體可以看官方文檔
http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_allow-suspicious-udfs
死四個安全選項
http://database.51cto.com/art/201005/199939.htm
提高安全設置
http://www.mianwww.com/html/2009/02/2926.html
六個安全選項
http://news.zdnet.com.cn/zdnetnews/2008/0124/718026.shtml
關于安全的文檔
http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
PHP
安全選項
Safe Mode
這個選項也是php常用的安全選項,開啟他之后服務器會對文件讀寫,執行文件,改變php環境變量,文件包含等功能進行比較嚴格的限制。
文件讀寫
開啟SafeMode之后,如果進行讀寫文件操作PHP檢查當前用戶是否是文件所有者,如果php被分配到一個比較低權限的賬戶,讀寫文件會比較困難。
以下這些函數會受到影響
chdir , move_uploaded_file, chgrp, parse_ini_file, chown, rmdir, copy, rename, fopen, require, highlight_file, show_source, include, symlink, link, touch, mkdir, unlink
運行文件執行系統命令
在執行系統命令的時候,只有safe_mode_exec_dir這個文件夾下的程序可以被執行。執行的指令會發送給escapeshellcmd進行過濾。
受影響的函數
exec, shell_exec, passthru, system, popen
另外,重音符也會被禁止。
環境變量
改變環境變量的函數也會被禁止
putenv,set_time_limit, set_include_path
如果想設置安全模式下可以改變的環境變量,需要這樣safe_mode_allowed_env_vars
文件包含
文件包含的話同樣也是需要safe_mode_include_dir來設定目錄
expose_php
這個安全選項,會防止response包中泄露PHP版本信息,比如包頭信息中通常會包含
Server: Apache/1.3.33 (Unix) PHP/5.0.3 mod_ssl/2.8.16
OpenSSL/0.9.7c
但如果expose_php開啟的話,PHP的版本信息將不包含在上面的頭信息里。
AddType application/x-httpd
有的時候你可能會覺得php的后綴不過癮,那么可以在httpd.conf 中找到 AddTYpe這行,添加可供解析的后綴名。
AddType application/x-httpd .html .htm .txt .asp
這種方法也可以用來留后門。
open_basedir
這個選項可以規定用戶只可以訪問規定目錄內的文件,這個選項并不和safe mode沖突
disable_functions
這個選項可以用來禁用一些函數
disable_functions = eval
當然,同樣的你能夠使用 disable_classes 選項來關閉對一些類的訪問。
magic_quotes_gpc
大家常說的加引號的選項。
display_errors
大家常說的顯錯,如果被關閉的話,那就只能盲注啦~。也可以通過log_errors設置輸出到文件。
posted on 2013-12-27 11:04 順其自然EVO 閱讀(206) 評論(0) 編輯 收藏 所屬分類: 數據庫