【XAMPP】PHP資料庫與phpmyadmin的安全性

phpMyAdmin 資料庫管理工具

phpMyAdmin是用PHP語言寫成的,能與資料庫溝通的一個方便的視覺化界面,讓使用者用滑鼠點一點就能操作MySQL資料庫了。

開啟XAMPP上的MySQL服務後,在瀏覽器上輸入 127.0.0.1/phpmyadmin
會來到這樣一個頁面





修改使用者帳號密碼

首先先點選Home回到主頁









修改登入時使用的密碼



C:\xampp\phpMyAdmin 資料夾中的 config.inc.php 檔案









登入授權方式

config.inc.php檔案中的auth_type權限認證方式,支援以下參數:

config: 預設方式。自動帶入config中設定的帳號密碼,不需額外輸入
cookie: 使用cookie帶入
http: 使用http Auth輸入帳號密碼的方式


signon: 單點登入方式(還沒研究)





主機名稱 允許來自何處的連線

這邊的使用者帳戶主機名稱欄位,指的是可以允許連線的來源

% 代表從何處ip都可以連線

localhost, 127.0.0.1, ::1 表示只能從本地端(伺服器自己電腦上)連線




如果設定成特定ip,則是這組帳號只能允許來自該ip的連線



此一步驟可以在添加使用者帳戶的時候
點選此主機或文字方塊來設定









遠端登入phpMyAdmin (Remote Access)

預設情況下 用別台電腦遠端連線時,phpMyAdmin 會出現權限不足的情形

Forbidden

You don't have permission to access this resource.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/7.4.30 Server at gjlmotea.com Port 443



httpd.conf  設定檔





找到 Alias /phpmyadmin "C:/xampp/phpMyAdmin/" 這一段
將 Require local 改為 Require all granted




存檔後重新啟動Apache服務就可以透過phpMyAdmin對資料庫遠端操作了。


因為暴露出phpmyadmin給遠端使用,等於使用者拿著伺服器端的config.ini.php登入phpmyadmin,導致"主機名稱"的限制都不會起作用
所以記得先設好使用者的密碼,否則任何人都可以進入連線(很危險、根本是在找死)

以下提供幾個方法

方法1

僅允許來自特定ip的連線


如果允許多個ip,則以空白連接:

Require ip 192.168.1.100 192.168.1.101

這樣一來從非以上ip的地方連線就會出現Forbidden


如果要同時允許local以及特定ip:

Require local 
Require ip 192.168.1.100 192.168.1.101


方法2

C:\xampp\phpMyAdmin\config.inc.php 
調整這兩行設定

是否允許無密碼連線、是否允許root帳戶連線

$cfg['Servers'][$i]['AllowNoPassword'] = true;

$cfg['Servers'][$i]['AllowRoot'] = true;




方法3


把用不到的User先Lock住
(不過也要小心,不要把全部帳號都刪除或上鎖,否則會連不進資料庫只能用一些特異方法了... 例如到其他台電腦的 C:\xampp\mysql\data\mysql 複製完好如初的資料覆蓋過去


這幾組預設帳號,密碼都改好之後會無法用root登入會出現以下畫面。


記得到 C:\xampp\phpMyAdmin\config.inc.php 修改登入時的密碼、以及更改 auth_type 授權驗證方式
帳戶 pma要改、root也要改



紅圈處記得修改成對應的





將資料庫密碼放於php檔案會不會有問題?

以wget測試結果來看,是沒有問題的

不管是php mysql的密碼或是wordpress wp-admin的後台都是顯示渲染過後的資料
敏感資料不容易被看到




wget下載後的資料會顯示資料庫無法連線、或者連線後的結果
而非連線帳號、密碼


會不會被找到該檔案之後密碼就暴露了?

一般情況下是不太可能的,客戶端瀏覽器只能接收到PHP渲染後產生的HTML內容

但若是攻擊者並非以網頁方式瀏覽
以類似FTP的方式直接存取檔案本身,能夠直接看到php檔案程式碼
那答案是肯定的

所以要做好安全的目錄權限設置
可設置許可權限,只有Web伺服器(如Apache、Nginx)能讀取該檔案
不允許其他使用者或進程訪問
例如 Linux將檔案權限設置成600、644,或者Windows在屬性中的"安全"選項卡設置使用者和群組權限(或直接使用icacls指令)

以及可以在 php.ini 檔案中 將這行設置成off
不直接將錯誤堆疊顯示在返回的HTML上,降低錯誤發生時 伺服器敏感資訊暴露的可能

display_errors = Off



然後重啟伺服器


以上錯誤就會只剩下以下這幾個字,沒人會知道你程式碼寫的帳號是`root`





最後要小心的是
不要貪圖方便
絕對不要放機敏資料到網頁伺服器上,尤其像是以下這種sql檔案
https://gjlmotea.com/warehouse/warehouse.sql

常見檔案如下:
.sql
.git
readme.md

推薦作法是
- 把它們都移到網站伺服器之外的目錄,例如:User目錄
- 或者設定成禁止訪問,例如:在httpd.conf中加入 `RedirectMatch 404 /\.git` 當訪問.git時必定出現404;或者在httpd.conf中將Indexes這個關鍵字移除掉,使得無法訪問 缺少index page的資料夾
- 或者至少設置個加密:用.zip或者7-zip,或者設置檔案加密
- 甚至不要放上伺服器上!



沒有留言:

張貼留言