2013-04-16 9 views
5

私の質問は基本的にはthis oneと同じですが、Windows Store Appの場合はc#とVisual Studioの場合と同じです。私は、ソースコントロールで(チェックインされていない)無視することができるファイルで、プロジェクトの秘密の値を保持する簡単な方法を持っていたいと思います。ビルド/ソース管理を容易にする方法でアプリのシークレットを保存するためにプロジェクトをどのように構築する必要がありますか?ソース管理のプロジェクトで秘密の値をどのように扱うべきですか?

最初のアイデアは、XMLファイル(チェックインされていない)に格納して実行時にロードすることでしたが、これはインストールするユーザーに利用可能なままなので、ビルド時に行う必要があります。いくつかの秘密の値を保存し、私のプロジェクトでビジュアルスタジオをコードに置き換えるにはどうすればいいですか?

+0

私は決して秘密をソース管理に入れません。新しいユーザーがプロジェクトに来たときに手動で追加します。 –

+0

「インストールする」ユーザーがソース管理にないXMLファイルにアクセスできる理由はわかりません。あなたのインストーラにバンドルされていますか?もしそうなら、それを取り出して実行時の依存関係にします。 – Kohanz

+0

@PeterRitchieそれはまさに私が言っていることです。私の質問は、ソース管理でその価値を持たずにプロジェクトを簡単に構築できるようにする方法を意味します。私は、 "プロジェクトをチェックアウトし、次にあなたのアプリの秘密でxを行う"。私は明確にするために編集しました。 – xdumaine

答えて

0

私の会社では、ソリューションに従うことに決めました。設定ファイルでは、セクションを外部設定の「秘密」値とリンクします。 外部設定はソース管理上にあります。最初は、ビルドサーバーがディスクを失ったときに問題が発生した後で、バックアップがある場所にディスクを保管する方が安全だと判断しました。ソース管理のフォルダ(ファイルサーバー上にもあります)は、実際にこれを必要とする人だけに読み書きするように制限されています。プロセスチェックアウト "プロジェクト"フォルダと "設定"フォルダをビルドしてビルドします。ビルド後、 "configuration"フォルダが削除されます。ビルドサーバーへのアクセスも制限されています。

+0

私は実際にこれらの値を保存/置換する方法のVisual Studio内の技術的なソリューションの多くを探しています。私はどこにでもバックアップしたり、アプリの秘密をチェックインすることを心配していません。 – xdumaine

+0

したがって、ほとんど誰もアクセスできない場所にコピー設定ファイルを保存し、サーバーチェックアウトプロジェクトとこの設定ファイルをビルドします。また、SnowCheetachのようなツールを使用して、トランスファーメーションだけを「安全な」場所に保管することもできます。ツールについての詳細:http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx –

+0

これは役に立ちません。私はビルドサーバーについて言及したことは一度もありません。それでも、そのファイルをいつ、どのように読むべきかについては何も教えてくれません。私の質問は、値を読み、使用することに関する技術的なものであり、それを意味するものではありません。 – xdumaine

0

1つの選択肢は、ソースコントロールに秘密を保存することですが、暗号化された形式で保存することもできます。開発環境やビルド環境では、環境変数を使用してキーを格納し、その場で解読します。そうすれば、情報を安全に保ちながらソース管理の利点を得ることができます。

app.configまたはweb.configを使用していても、起動時にコードから設定を変更するだけで、これを行うことができます。更新

エリック

0


あなたが信頼されていないエリア(例えば、公開ソース管理)に秘密を入れた場合、それは脆弱です。暗号化されていても、十分な注意を払って検索することができます。

実際に手の届かないところに置く唯一の方法は、第三者APIとやり取りする外部サービスを用意することです。これには独自のトレードオフがあります(例:コメントで述べたようなユーザー認証)。特に、開発者がテスト時にサードパーティのAPIを利用する必要がある場合、私は秘密の公開を制限する他の選択肢は見当たりません。

+0

これはアプリ自体とは関係ありません。これは、サードパーティのAPIに対して認証するための秘密です。私はそれがアプリの設定のためだと決して言ったことはありません。 – xdumaine

+0

Live Connectの統合はサードパーティの統合ですが、アプリレベルではなくWindowsストアレベルでセットアップされています。準最適な回避策は、アプリケーションからのリクエストに応答し、それらを秘密の第三者APIに転送する中間サービスを持つことです。サーバーのセキュリティを制御するユーザーに応じて、サーバー側の秘密はサーバー上の構成ファイル内に存在する可能性があります。 –

+0

APIシークレットを防ぐために余分なサーバーを追加することをお勧めしますか?私はまだ何らかの形でユーザーを認証する必要がありますが、今は余分なホップを持っています。それは余計なようで、値を暗号化するよりも優れたものはありません。これは、ソース管理/他の開発者からキーを保護することに関連する私の質問ではなく、エンドユーザーからキーを保護することに関連するという事実の他にあります。 – xdumaine

0

すべての秘密値のスロットを持つ新しいクラスファイルをプロジェクトに作成し、すべての秘密値のダミー/テスト値を保持します。プロジェクトの残りの部分でソースコントロールにチェックインして、秘密にアクセスしないでビルドする人に何らかのテストバージョンが提供されるようにします。

次に、実際の秘密の値を持つクラスファイルのコピーを作成し、ソースコントロールの外に置きます。このクラスファイルを探す事前ビルドイベントにバッチスクリプトを作成し、見つかった場合は、プロジェクトに含まれているダミーファイルを置き換えます。

このようにしても、プロジェクトはまだソース管理が可能で、誰でもチェックアウトしてビルドし、テストモードで実行できます。秘密のファイル/値はビルドサーバーにのみ保存されるため、プロジェクトをビルドするときにのみ実際の値があります。

秘密ファイルをどこかにバックアップしてください。また、.NETコードは簡単にデコンパイルすることができるので、秘密が秘密ではないことを覚えておいてください。.NETリフレクタを持つユーザーは、秘密クラスを含め、リリースアセンブリのすべてのコードを見ることができます。

関連する問題