2009-08-24 7 views
1

私はsymfonyフレームワークとPropelを使用していますが、私はデータベースを暗号化する最も簡単な方法は何もありませんでした。私はパスワードではなくすべてのデータベースについて話しています。私はいくつかの情報(ユーザーアカウント、パスワードなど)を管理するクライアント用の小さなWebアプリケーションを構築しましたが、誰かがphpmyadminにアクセスできるようにしたい場合には表示します。symfonyのデータベースを暗号化する方法

答えて

1

これはちょっと単純かもしれませんが、あなたはDBに書き込む前に単純にサーバーの暗号化を行い、読み込み時にそれを解読するのはどうでしょうか?あなたの問題のように、サーバー管理者にを簡単に送信しないようにしているようです。あなたのデータを読んでください。 Symfonyを使用している場合、おそらくコード内でコードを変更する必要はありません。


いくつかの掘り出しの後、私が特に勇敢であると感じたら、どうすればいいでしょうか?

xxx/symfony/vendor/propel/util/BasePeerのbuildParams()を編集します。860のようにあなたが

$params[] = array('column' => $crit->getColumn(), 'table' => $crit->getTable(), 'value' => $crit->getValue()); 

$params[] = array('column' => $crit->getColumn(), 'table' => $crit->getTable(), 'value' => your_encryption_method($crit->getValue())); 

への変更(私が何かを逃した場合を除く)はsymfony/Propelはデータベースへの書き込みすべてが最終的にその関数を呼び出すことになりますので、あなたが書いたすべてを見つけるでしょう上のPHP、 your_encryption_method()で暗号化されます。

これを試してみて、それが動作し、あなたが勇敢な感じまだなら、XXX/symfonyの/ベンダー/推進-ジェネレータ/クラス/推進/エンジン/ビルダー/ OM/PHP5 /中addHydrate()関数を変更symfony propel-build-modelまたはsymfony-propel-build-allを呼び出すと、hydrate()コードのpropelが自動的に生成されるように、PHP5BasicObjectBuilder.php(668行)

それは現在、あなたがこの変更を行った後

case PropelTypes::DATE: 
         case PropelTypes::TIME: 
         case PropelTypes::TIMESTAMP: 
          $script .= " 
      \$this->$clo = \$rs->get$affix(\$startcol + $n, null); 
"; 
          break; 

         default: 
          $script .= " 
      \$this->$clo = \my_decryption_function($rs->get$affix(\$startcol + $n)); 
"; 

の線に沿って何かにそれを修正したい

        case PropelTypes::DATE: 
         case PropelTypes::TIME: 
         case PropelTypes::TIMESTAMP: 
          $script .= " 
      \$this->$clo = \$rs->get$affix(\$startcol + $n, null); 
"; 
          break; 
         default: 
          $script .= " 
      \$this->$clo = \$rs->get$affix(\$startcol + $n); 
"; 

のように見えるにsymfonyはPropelビルド・モデルを実行して、私をさせてくださいそれがうまくいくかどうかを知る:-)これらのファイルを変更する前にこれらのファイルをバックアップしておいてください。symfonyのコアを変更しているので、他のプロジェクトには問題があります。暗号化されたデータをdb

+0

weeeeel ....はい、それは私の質問でした。 symfonyでこれを行う最も簡単な方法は何ですか? symfonyを使ってデータベースに情報を埋め込む方法: – Daniel

+0

Symfonyのバージョンは何ですか? – sjobe

+0

私はSymfony 1.0.20にいる – Daniel

2

通常、これはMySQLの組み込み権限で処理します。

誰かがphpMyAdminを使用する唯一の方法は、サーバにインストールして設定している場合です。これは、簡単にアンインストールする方法や、SSL接続と強力なパスワードを使用できない場合に修正するのが最も簡単な方法です。

他に考慮すべきことは、サーバーをロックダウンすることです。まず、MySQLがローカルホストまたはローカルネットワークからの接続のみを受け入れるようにすることができます。

実際の質問に関しては、効果的な方法でデータベース全体を暗号化する方法はわかりません。あなたは確かにデータを暗号化することができますが、サーバに解読コードを置く必要があることを考えると、メリットはありません。誰かがサーバにアクセスしても、データにアクセスすることができます。最善のことは、最初にそのアクセスを防ぐことです。

+0

私は共有ホスト上で動作しますので、phpmyadminとsslをアンインストールすることはできません。私の恐れは、Webホスト企業がデータベースにアクセスして見ることができるということです。コードがサーバー上にある場合でも、暗号化キーは、クライアントが自分のアカウントにログインする際に使用するパスワードと同じ(または別の)パスワードにすることができます。アルゴリズムは知っていますが、暗号化キーは知っていません。 – Daniel

+0

セキュリティがそれほど懸念される場合は、共有ホストにいないようにしてください。 少なくとも、ホストは信頼できるものであり、確実なセキュリティポリシーを備えていることを確認してください。 私はあなたにこの回答をよりよくしていますか? –

0

これは3つのレベルの質問です。

  1. 入力/出力データであるため、 を傍受することはできません。
  2. 管理者権限のため、作業中に間違った人 によってシステムにアクセスすることはできません。
  3. ハードドライブがあるので、誰かが コンピュータに直接アクセスできる場合、ハードウェアを抽出しても にアクセスすることはできません。

1の場合、SSLとHTTPSを使用できます。

2の場合、パスワード、権限、およびアップデートの設定については、sysadminのベストプラクティスに従ってください(serverfault.comはあなたの友人です)。これにはDB管理者が含まれます。

3の場合は、ハードウェア全体を暗号化する必要があります。 DBの暗号化だけを使用すると、サーバーのパフォーマンスが低下します。暗号化を使用するとシステムは遅くなるが、Webアプリケーションの枯渇の場合はファイルシステムの上のレベルでそれを行う。さらに、暗号化されたハードドライブ上でLinuxシステム全体を実行するためのツールはかなり成熟しています(Ubuntu上では、LVMはこれをほとんど透過的に行います)。

あなたが気づいたように、これはSymfonyとはまったく関係がありません。

関連する問題