[英]PHP: How to secure a 'plaintext' password within a PHP file in .htaccess
我有一台Nginx服務器,它將流量重定向到一個文件夾(例如,僅將文件夾“ htaccess”稱為“ htaccess”)到404頁,以便我可以在php文件中存儲純文本密碼。 事實是,這感覺非常不安全,但是訪問我的mysql數據庫是必需的。
在線指南中找到:
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'redacted');
define('DB_PASSWORD', 'redacted');
define('DB_NAME', 'redacted');
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>
同樣,我需要使用PHPMailer存儲SMTP服務器的密碼,而我的解決方案是使用變量$ password和$ username制作一個.php文件,並包括此文件(位於htaccess文件夾中)以連接到服務器。 。 但是,這也感到不安全,但是我無法找到解決方法。 我主要關心的是用戶可以簡單地注入php代碼並echo $password
並顯示php文件正在引用的變量。 誰能為我指出正確的方向? .htaccess是在服務器上隱藏數據的安全方法嗎?
htaccess / user-config.php:
$pass='somepassword';
$user='someuser';
htaccess之外的php文件:
// for examples sake, I'll call the folder 'htaccess'
include htaccess/user-config.php
$mail = new PHPMailer();
$mail->Username = $user;
$mail->Password = $pass;
避免需要使用htaccess的正確方法是將這樣的配置文件放在Web根目錄之外。 這就是為什么大多數框架的Web根都指向包含靜態資產(圖像,CSS)的public
文件夾和從../
加載文件的index.php的原因,例如:
- app
- controllers
- models
- views
- public <-- web root
- img
- css
index.php <-- app entry point
config.php <-- config outside web root
這解決了一個問題,但是留下了您提到的另一個問題-公開了系統配置變量。 泄漏此信息的最常見方法是保持調試設置處於啟用狀態,其中堆棧跟蹤和詳細的錯誤消息可能會顯示很多信息-因此請確保您只在生產系統上顯示一般錯誤消息,並且使未經授權的登台或測試環境無法訪問用戶。 您對能夠“簡單地注入”用戶提供的PHP表示的擔憂確實是一個問題,但這將代表應用程序中非常重要的遠程代碼執行(RCE)漏洞,並且憑證泄漏將是您最少的問題擔心 這就是為什么大多數框架結構化事物以避免這種問題的原因。
使用.php
文件存儲配置信息的一個小好處是,如果直接訪問它,它將運行PHP(不執行任何操作且不產生任何輸出),而不顯示文件的內容。 .ini,JSON或yaml文件不是這樣。
完全避免在文件中使用配置的一種方法是將其通過環境變量傳遞,但是,這些值仍然最終出現在PHP運行時環境中(最明顯的是$_ENV
,但在其他地方也是如此)。
最終,這就像擔心有人將鑰匙交給您進入您的房子; 解決的辦法是不要給他們鑰匙。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.