3

私はPHPプロジェクトに取り組んでおり、mysqlに接続するためのデータベース資格情報などのグローバル値が必要な場所に含めるグローバル設定ファイルを使用しています。例えば:

settings.php:

<?php          
    const DB_ADDRESS = 'localhost';
    const DB_USERNAME = 'johndoe';
    const DB_PASSWORD = 'mypassword';
    const DB_PORT = 7777;   
?>

私の質問は、それは十分に安全ですか? たとえば、エクスプローラー/クロームでデバッグ中に変数の値を確認する方法はありますか? 別のより安全な方法はありますか?

ありがとう。

4

6 に答える 6

6

PHP 情報は、ブラウザに送信される前にサーバーで処理されるため、通常の状況ではブラウザ内で見ることはできません。ただし、Web サーバーの構成が間違っていると、プレーン テキスト バージョンのコードがブラウザーに送信され、ユーザーに表示される可能性があります。そのため、重要なコードは常にドキュメント ルートの外に置き、必要に応じてファイルに含める必要があります。

于 2012-06-01T13:55:56.383 に答える
5

これは、サーバーが侵害された場合にはほとんど保護されませんが、バグやその他の脆弱性 (次のようなもの) によってソース コードが公開された場合に備えて、http ://www.php.net/archive/2012.php#id2012 -05-06-1 ) ますます一般的なアプローチは、さまざまな資格情報とパラメーターをサーバー環境変数として設定することです。

たとえば、apache vhost/.htaccess では、次のような環境変数を設定できます。

SetEnv DB_ADDRESS localhost
...

そしてあなたのPHPコードで:

$DB_ADDRESS = getenv('DB_ADDRESS');

もちろん、ユースケースなどに応じて、この値をクラス定数、グローバル定数に割り当てることができます....

これにより、ソース コードの移植性が向上し、ホスティング環境 (ステージング/運用など) に応じてさまざまな構成を提供できるようになります。

SetEnv APPLICATION_ENV 開発 - Zend Framework と対話する .htaccess?

設定がハードコードされることはなく、ソース コードからアクセスすることもできません。Heroku は、アプリケーション構成に同様のアプローチを使用します。

于 2012-06-01T14:45:57.240 に答える
3

変数はサーバー内に保持され、クライアントには送信されません。ユーザーがカスタム変数を出力できる脆弱性がスクリプトにない限り、ソースコードにアクセスすることなく、誰に対してもセキュリティを確保できます。

于 2012-06-01T13:55:26.717 に答える
2

セットアップにひどい問題がない限り、バックエンドコードがフロントエンドに表示されないようにする必要があります。それが発生し、バックエンドのソースコードが「リーク」された場合(可能性は低いですが可能性があります)、パスワードは一目でわかります。

パスワード文字列は対称暗号化スキームで暗号化できますが、暗号化キーをどこかに保存する必要があります。その後、暗号化キーが漏洩した場合は、開始点に戻ります。パスワードをプレーンテキストにするよりも少し優れていますが、100%安全なものはありません。

于 2012-06-01T13:58:00.283 に答える
2

これが標準的な方法です (phpmyadmin、mediawiki などを参照してください)。この php ファイルにはアクセスできず、サーバー設定に誤りがない場合は読み取ることができません。

通常、この設定ファイルが php ファイルの 1 つに含まれていることを確認するテストを追加します。

<?php
if ( !defined('IN_KP') ) die("Hacking attempt");
?>

もちろん、インクルード ファイルで「IN_KP」を定義します。

<?php
define('IN_KP', true);
include("sensitive_file.php");
?>

しかし、全体的な最善の保護は、mysql アカウントは localhost からしかアクセスできないため (修正しない場合は!)、これらの機密データはそれほど機密ではないということです。

于 2012-06-01T13:55:56.700 に答える
1

たとえば、エクスプローラー/クロームでデバッグ中に変数の値を確認する方法はありますか?

それらをビューに送信しない場合(つまり、echo、var_dump、print_r、sessionなど)-いいえ。ブラウザはそれらについて決して知りません。

于 2012-06-01T13:56:21.623 に答える