簡體   English   中英

PHP:如何在.htaccess中的PHP文件中保護“明文”密碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM