1

ModelState が有効かどうかを確認し、モデルのインスタンスをパラメーターとして渡す別のメソッドを呼び出す MVC コントローラーに単純な post メソッドがあります。このモデルには、Fiddler を見ることで簡単に取得できる機密データが含まれています。私の目標は、このデータを何らかの方法でマスクまたは暗号化して、http トレースに表示されないようにすることです。

セッションまたは一時変数を使用することを提案する投稿を見たことがありますが、それは私の場合のオプションではありません。

コードは次のようになります。

[HttpPost]
[ActionName("Search")]
[AccessControl(Xri)]
public ActionResult SearchPost(string string1, ViewModel model)
{
        model.NoResults = false;    

        if (ModelState.IsValid)
        {

           if (ModelState.IsValid) return RedirectToAction("TargetAction", model);            
         }

}

[AccessControl(Xri)]
public ActionResult TargetAction(string arg, ViewModel viewModel)
{
 .
 .
 .
}

Fiddler は次のことを示しています。

/TargetAction?id=01010101&date=08%2F14%2F2013%2000%3A00%3A00&To=08%2F21%2F2013%2000%3A00%3A00¶m1=somevalue¶m2=somevalue2

ここに示されている URL パラメータをマスクする方法はありますか?

4

2 に答える 2

1

サーバーでSSLを実行する必要があります。

信頼できる機関からのサーバー証明書がなければ、ネットワーク上でデータを暗号化するためにできることはほとんどありません。なんで?クライアント(おそらくJavaScript)がデータをデコードできるように、データの送信を開始する前に、暗号化/復号化の詳細をクリアテキストで送信する必要があるためです。

証明書を使用して 443 で操作すると、カスタム実装では打ち負かすのが難しい、サーバー/ブラウザーからの組み込み機能が提供されます。

データを隠したい (そして、ほとんどの Web ユーザーのレベルを超えて) 場合は、データを暗号化するのではなく、いつでも base64 エンコードすることができます。データを暗号化しているわけではなく、復号化することは可能であることを明確にしてください。このアプローチは、暗号化の形式ではありません。

とにかくそのアプローチを取ることに決めた場合は、いくつかのリソースを次に示します。 クライアント側のエンコーディング/デコーディング Base64 へのエンコーディングに関する MSDN リファレンス

乾杯。

于 2013-08-22T20:27:31.940 に答える
0

これを行うには、次の 2 つのオプションがあります。

  1. データをサーバーに保存し、ユーザーにトークン (GUID など) を渡してデータを取得します。Session または TempData を使用することはオプションではないため、viewmodel をデータベースに保存し、URL にトークンを指定してユーザーをリダイレクトし、次のリクエストでそれを取得することができます。

  2. もう 1 つのオプションは、ユーザーが現在行っているように URL でビューモデルを渡すようにすることですが、暗号化された形式で渡します。たとえば、モデルを JSON にシリアル化し、.NET の組み込み暗号化アルゴリズムの 1 つを使用してモデルを暗号化し、暗号化された文字列をビュー モデルとして渡して次のアクションにリダイレクトできます。次に、ターゲット アクションを次のように変更できます。

    [アクセスコントロール(Xri)]
    public ActionResult TargetAction(string arg, string encryptedViewModel)
    {
      var decryptedString = Decrypt(encryptedViewModel) ; // 暗号化に一致する復号化関数を提供します
      var viewModel = JsonConvert.DeserializeObject(decryptedString);
    }
于 2013-08-22T20:53:32.297 に答える