web-dev-qa-db-ja.com

variable_getとvariable_setはどの程度安全ですか?

FTPユーザー名とパスワードで変数を保存するカスタムモジュールがあります。 variable_getは安全ですか?すなわち。モジュールの外部からアクセスできますか?.

Variable_setは同等に安全ですか?

明らかに、それらはデータベースに保存されており、DBと同じくらい安全ですが、DBは安全であると想定しています。

4
Coomie

variabe_set()を使用して設定されたすべての変数はDBに格納され、取得されてグローバル変数$confに割り当てられます。

function variable_get($name, $default = NULL) {
  global $conf;    
  return isset($conf[$name]) ? $conf[$name] : $default;
}

ユーザーがPHPスクリプトを追加できるコンテンツタイプがなければ、これは十分に安全です。

私はDBが安全だと思っています。

SQLインジェクション攻撃によってDB全体が公開された場合はどうなりますか?機密データは常に暗号化された形式で保存して、ハッキングされても攻撃者が使用できないようにします。パスワードをプレーンテキストとしてデータベースに保存しないでください。暗号化アルゴリズムを使用して保存します。

0
GoodSp33d

この情報を変数ストアに格納するvariable_setまたはsystem_settings_formでこの情報を保存しないことをお勧めします(これはデフォルトでデータベースであり、memcacheなどのキャッシュが行われている場所ならどこでもキャッシュできます)。

代わりに、情報として$confsettings.php配列を使用することをお勧めします。 settings.phpは、データベースの資格情報を保存するためにすでに使用していて、すでに他人の目から保護しているという利点があります。

このシステムの優れた点は、variable_getを使用して$confから値をロードできることです。これは簡単で便利です。

詳細については、コメントアウトされたコード例とドキュメントがたくさんあるsettings.phpファイル自体をお読みください。

7
greggles

FTPパスワードをそのままデータベースに保存しないでください-mcrypt( http://www.php.net/manual/en/mcrypt.examples.php )または他のライブラリを使用して暗号化し、暗号化暗号を保存しますコードで。

例。

FTPパスワードを保存

$encrypted_password = mcrypt_ecb(MCRYPT_3DES, $cipher, $form_state['values']['password'], MCRYPT_ENCRYPT);
variable_set('ftp_password', $encrypted_password);

FTPパスワードの読み込み

$decrypted_password = mcrypt_ecb(MCRYPT_3DES, $cipher, variable_get('ftp_password', ''), MCRYPT_DECRYPT);

注:$ cipherは、モジュールコードのどこかに定義する必要があります。

5
Eugene Fidelin

Variable_getを介して取得するこれらの変数はすべて変数テーブルに格納され、毎回ロードされますDrupalが開始します。サイト名、メインの電子メールアドレス、およびその他のモジュール構成はこのテーブルに格納されますが、暗号化されません。

variable_getは、サイトテンプレートの任意の場所で機能します(ページテンプレート、カスタムphpブロックなど)。

パスワードを保護する最善の方法は、FTP実装以外でパスワードを取得しないことです。例として、管理フォームでは、デフォルト値としてvariable_get('form-element-key-here', '')を使用します。したがって、フォームは構成を格納したように見えます。これをパスワードフィールドに対して行わないでください。 SMTP認証モジュールとPHPMailerモジュールで使用されているのと同じテクニックを見ることができます。 http://drupalcode.org/project/phpmailer.git/blob/refs/heads/7.x-3.x:/phpmailer.admin.inc

Develモジュールを有効にして安全でないままにしない限り、phpまたはデータベースアクセスを持つ誰もあなたのパスワードを見ることができません。

1
AyeshK

つまり、データベースの特定のテーブルから情報を格納/取得するための関数にすぎません。データベース全体には、Drupalインスタンス内のすべてのモジュール/テンプレート/ ...からアクセスできます。

いくつかのアドバイスは、あなたがあなたのデータベースに何を保存したいのかを覚えておくことです。あなたはdbが安全であると想定していると述べました、そしてそれはすべての中で最も大きな部分です。

すでに述べたように、そのようなデータを保存する前に暗号化することをお勧めします。

0
Kevin