0

asp.net MVC 4でクレジットカード番号やその他の機密情報などの情報を入力するフォームがあるとしましょう。エンティティオブジェクトを持つモデルクラスがあり、ビューはそれらを入力するための適切なテキストボックスまたはエディターをレンダリングします情報。次に、ユーザーが送信ボタンをクリックすると、アクション メソッドが呼び出され、情報が取得されてサーバーに送信されて保存されます。データがクライアントから送られてくるときにデータを暗号化して保護したいですか? どうやってするか?

コントローラークラスで [RequiresHttps] 属性を使用すると、サーバーにインストールされた証明書を使用して安全な接続が確立されることを理解していますか? これがどのように機能するか説明していただけますか?

また、安全な方法でクライアントからサーバーにデータを送信する最良の方法は何ですか? 他に簡単なテクニックはありますか?暗号化と復号化がこの問題をどのように解決するか説明していただけますか?

前もって感謝します。ところで、私はこのテクノロジーの初心者です。

ありがとう

4

2 に答える 2

2

最初に行う必要があるのは、VeriSign、GeoTrust、Thawte などの信頼できる機関からの SSL 証明書をインストールすることです。これにより、クライアントとサーバー間の通信が保護されます。HTTPS の詳細については、ウィキペディア http://en.wikipedia.org/wiki/HTTP_Secureを参照してください。

ただし、これはセキュリティを提供しません。Web サーバーが安全であることをネットワーク レベルから確認する必要があります。これには、ファイアウォールが存在し、サーバー自体に適切なセキュリティ手順があることを確認することが含まれます。Web 開発者として最も信頼できる人物は、会社のネットワーク セキュリティ管理者です (すべての開発者は、何が起こっているのかを知るために、自分でこれを行うことを学ぶべきだと思います)。

アプリケーションを保護する必要があります。クレジット カード番号をシステムに保存しないことをお勧めします。そうすれば、あなたはトラブルを求めているだけです。たとえば、暗号化されていてもデータベースに保存し、アプリケーションが SQL インジェクションに対して脆弱である場合、すべての顧客のクレジット カード番号が攻撃者にさらされる可能性があります。暗号化されている場合でも、暗号化を扱う際には次のようなことを覚えておく必要があるため、安全だと思い込まないでください。

  1. 実際の暗号化は、暗号化の中で最も簡単な部分であり、選択できる優れたアルゴリズムがたくさんあります。
  2. 最も難しい部分は鍵の管理です
  3. 多くの暗号化アルゴリズムには特定の弱い鍵があります
  4. 適切なエントロピーを与えるキーを選択することはできません (P@$$単語は簡単に推測できます)。
  5. 鍵を安全に保管するにはどうすればよいですか? アプリケーションがパス トラバーサル攻撃に対して脆弱な場合、ハッカーは非常に簡単にサーバーからアプリケーションを取得できる可能性があります
  6. すべてを正しく行ったとしても、ネットワーク管理者または別の開発者が悪意を持ってキーとデータベースを盗んだ場合はどうなりますか? (ネットワーク管理者と他の開発者に申し訳ありません)

Authorize.NET、Paypal などの支払いゲートウェイを使用すると、クレジット カードを保管する必要なく処理できます。コントローラーがそれを受け取ると、サービスを呼び出すだけで (通常は HTTPS を介した XML 呼び出しのみ)、結果を取得した後は、クレジット カードが届いたことを忘れてしまいます。後でトランザクションを無効にするか返金する必要がある場合、または承認保留を行い、後でキャプチャ する必要がある場合に備えて、返されたトランザクション番号を保存できます。

彼らは、トークンを使用してクレジットカードを最後に保存し、自動化された定期請求を行うメカニズムも提供します. たとえば、Authorize.NET の高度な統合方法https://developer.authorize.net/api/aim/ http://www.authorize.net/support/AIM_guide.pdf

于 2013-07-02T01:11:36.103 に答える
0

この暗号化と復号化のサンプル

 public static class lockIt
    {
        public static string EncryptString(string ClearText)
        {
            byte[] clearTextBytes = Encoding.UTF8.GetBytes(ClearText);
            System.Security.Cryptography.SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
            MemoryStream ms = new MemoryStream();

            string key1 = "aaaaaaaaaaaaaaaa";
            string key2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

            byte[] rgbIV = Encoding.ASCII.GetBytes(key1);
            byte[] key = Encoding.ASCII.GetBytes(key2);
            CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
            cs.Write(clearTextBytes, 0, clearTextBytes.Length);
            cs.Close();
            return Convert.ToBase64String(ms.ToArray());
        }

        public static string DecryptString(string EncryptText)
        {
            byte[] encryptedTextBytes = Convert.FromBase64String(EncryptText);
            MemoryStream ms = new MemoryStream();
            System.Security.Cryptography.SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();

            string key1 = "aaaaaaaaaaaaaaaa";
            string key2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

            byte[] rgbIV = Encoding.ASCII.GetBytes(key1);
            byte[] key = Encoding.ASCII.GetBytes(key2);
            CryptoStream cs = new CryptoStream(ms, rijn.CreateDecryptor(key, rgbIV), CryptoStreamMode.Write);
            cs.Write(encryptedTextBytes, 0, encryptedTextBytes.Length);
            cs.Close();
            return Encoding.UTF8.GetString(ms.ToArray());
        }

        public static string EnString(string instring)
        {
            return EncryptString(EncryptString(instring));
        }

        public static string DeString(string outstring)
        {
            return DecryptString(DecryptString(outstring));
        }
于 2013-07-02T09:58:29.887 に答える