2016-08-31 6 views
0

私はCWE-798で説明されている問題を解決しようとしています。具体的には、アプリケーションがデータベースに対して安全に認証されるようにする方法です。私はmysqld内でmysqlパスワードを設定し、その情報をPHPアプリケーションサーバーに送りたいと思います。これは、PHPインスタンスがmysqldに接続しようとする前に、新しいパスワードをmysqldからPHPに伝達することを必要とします。MySQLからクライアント接続を開始する

(私はmitre.orgの提案されたアプローチを読んで、特権アクセス管理についていくつかの知識を持っていましたが、推奨されていないものは実際に問題を解決していません)。

これがmysqld内で開始されない限り、そのイベントスケジューラを使用すると、MySQLの外部に何らかの種類のスクリプトを維持する必要があり、接続するための資格情報が必要になります。したがって、目的を破ります。

私の問題は、新しいパスワードを入力するためにMySQLにアプリケーションへのクライアント接続を開始させる方法がわからないことです。 URLの呼び出しやプログラムの実行に標準的な機能を提供するようには見えません。

私の唯一の選択肢はimplement a UDFですか?

+0

mysqlは他のmysqlサーバと通信できますが、「任意の」ネットワーキング機能はありません。 foo.example.comに「hi mom!」というメッセージを送信することはできません。ですから、これを実現させるためには、完全なプラグインのUDFが必要です。 –

+0

@Marc:SELECT INTO OUTFILEはファイルシステムにメッセージを送信します。これはinotifyによってLinux上で監視され、その後通信される可能性がありますが、これは非常に高い待ち時間の解決策であり、効果的にするには異なる時間に2つのアカウントを必要とします。すなわち、私は必ずしも直接ルートを探しているわけではありません! – symcbean

+0

しかし、これはもはやmysqlの問題ではありません。 –

答えて

0

説明している脆弱性は、主に、デスクトップアプリケーションやモバイルアプリケーションの場合のように、与えられた内容を自由に検査できるユーザーの手にあるアプリケーションに関連しているようです。あなたがそこにクレデンシャルを持っているなら、あなたはそれらを暗号化するために大きな苦労をしなければなりません、そしてあなたの鍵を保護することによってその暗号化がひどくならないようにしなければなりません。勝つことはありません。

これは、DVDデータを復号化するための秘密鍵であるDVD encryption was crackedが、デスクトップアプリケーションに保存され、最終的に公開されなかった方法です。

サーバー側のコードにはさまざまな懸念があります。ここでは、アプリケーションに資格情報をハードコーディングするのを避けたいのですが、これは問題になる可能性がありますが、敵対的なユーザーが心配しているわけではありません。がバージョンコントロールシステム。

これを絶対に行わない方法の1つは、アプリケーションが参照できる設定ファイルのように、アプリケーションの外部にあるファイルに資格情報を保存することです。ほとんどのフレームワークには、データベースへの接続方法を定義する何らかの設定ファイル(.yml、.ini、.xml)があります。このファイルはサーバー上にのみ、サーバー上に保存する必要があります。開発者用ワークステーションではなく、バージョンコントロールではなく、特には共有されません。

Zookeeperのようなものを使用して設定ファイルを管理することはできますが、何百ものサーバーを管理していない限り、必要な時間を費やせば無駄な作業になります。

ここで簡単な答えは次のとおりです。コードに資格情報を入れたり、コードに格納したりしないでください。それをサーバとサーバだけに保存​​されている設定ファイルに入れてください。

+0

は、資格情報をどこに格納するかは実際問題ではありません。クライアント側のアプリケーションがデータベースに直接アクセスしている場合、そのアクセスを永続的に保証することはできません。だからこそ、あなたはいつもデータベースアクセスを代理するミドルウェア層を持ち、そこでセキュリティを強制するのです。 –

+0

@marcbああ、絶対に、慎重な資格情報が公開されないようにするには、仲介が必要です。うまく設計されたモバイルアプリケーションは、*常に* APIの何らかの種類のAPIを経由します。おそらくここではPHPの機能です。 – tadman

関連する問題