PHP安全程式設計 不要暴露資料庫訪問許可權

2021-08-02 16:25:26 字數 1538 閱讀 2669

資料庫使用中需要關注的主要問題之一是訪問許可權即使用者名稱及密碼的暴露。在程式設計中為了方便,一般都會用乙個db.inc檔案儲存,如:

[php]view plain

copy

<?php  

$db_user

= 'myuser'

;  $db_pass

= 'mypass'

;  $db_host

= '127.0.0.1'

;  $db

= mysql_connect(

$db_host

, $db_user

, $db_pass

);  

?>  

使用者名稱及密碼都是敏感資料,是需要特別注意的。他們被寫在原始碼中造成了風險,但這是乙個無法避免的問題。如果不這麼做,你的資料庫就無法設定使用者名稱和密碼進行保護了。

如果你讀過http.conf(apache的配置檔案)的預設版本的話,你會發現預設的檔案型別是text/plain(普通文字)。這樣,如果db.inc這樣的檔案被儲存在**根目錄下時,就引發了風險。所有位於**根目錄下的資源都有相應的url,由於apache沒有定義對.inc字尾的檔案的處理方式型別,在對這一類檔案進行訪問時,會以普通文字的型別進行返回(預設型別),這樣訪問許可權就被暴露在客戶的瀏覽器上了。

為了進一步說明這個風險,考慮一下乙個以/www為**根目錄的伺服器,如果db.inc被儲存在/www/inc,它有了乙個自已的url假設example.org是主機網域名稱)。通過訪問該url就可以看到db.inc以文字方式顯示的原始檔。無論你把該檔案儲存在/www哪個子目錄下,都無法避免訪問許可權暴露的風險。

對這個問題最好的解決方案是把它儲存在**根目錄以外的包含目錄中。你無需為了達到包含它們的目的而把它們放至在檔案系統中的特定位置,所有只要做的只是保證web伺服器對其有讀取許可權。因此,把它們放在**根目錄下是沒有必要的風險,只要包含檔案還位於**根目錄下,任何減少風險的努力都是徒勞的。事實上,你只要把必須要通過url訪問的資源放置在**根目錄下即可。畢竟這是乙個公共的目錄。

前面的話題對於sqlite資料庫也有用。把資料庫儲存在當前目錄下是非常方便的,因為你只要呼叫檔名而無需指定路徑。但是,把資料庫儲存在**根目錄下就代表著不必要的風險。如果你沒有採用安全措施防止直接訪問的話,你的資料庫就危險了。

如果由於外部因素導致無法做到把所有包含檔案放在**根目錄之外,你可以在apache配置成拒絕對.inc資源的請求。

[php]view plain

copy

"\.inc$"

>  

order allow,deny  

deny from all  

如果只是因為要舉個例子而這麼寫的話,可以理解,畢竟大家學到了一些手段,但這個例子未免生硬了一點。實際上只要把該檔案更名為db.inc.php就可以了。就好象房子破了個洞而不去修補,卻在外面去造乙個更大的房子把破房子套起來一樣。

後面你還可以看到另外一種防止資料庫訪問許可權暴露的方法,該方法對於共享伺服器環境(在該環境下儘管檔案位於**根目錄之外,但依然存在暴露的風險)非常有效。

php資料庫程式設計,php資料庫程式設計步驟

php有三種方式來操作mysql資料庫 1.mysql擴充套件庫 2.mysqli擴充套件庫 3.pdo mysql擴充套件庫和mysql資料庫的區別 mysql資料庫用於存放資料 mysql資料庫的三層結構示意圖 mysql擴充套件庫是一堆函式,是php設計者提供給程式設計師用於完成對mysql資...

php的資料庫程式設計

通過簡單的例子看看pdo程式設計的增刪改查 pdo new pdo mysql host localhost dbname statis data root 123456 增加 id rand 1,10000 insert sql insert into test id values id resu...

資料庫安全

先分3點從全域性來看 對作業系統的安全需求 防止對dbms的非法訪問和修改,保護儲存的資料 檔案的安全性,對資料庫使用者的認證 對資料庫系統本身的安全需求 使用者認證管理 訪問控制 審計,資料庫的穩定性,保證資料的安全性與完整性,完善的恢復功能,資料加密 對資料庫應用系統的安全需求 訪問控制 認證管...