4

ASP.NETMVCを使用してオンライン求人応募に記入するシステムを作成しています。これは、MVCフレームワークに慣れるための単なる実験です。私は間違いなくセキュリティの専門家ではないので、このWebアプリは機密情報を扱うので、ここでアドバイスをもらいたいと思いました。

システムには、ウィザードのようなビューのセットがあります。あるビューから次のビューに移動して、最終的に送信する最後まで関連情報を入力します。

各求人応募は、GUID主キーとともにデータベースに保存されます。現在、各ページのビューの非表示フィールドにそのGUIDを格納しているだけです。これにより、次のようにコントローラーでモデルを簡単に更新できます。

[HttpPost]
public ActionResult ExampleAction(FormCollection formValues)
{
    Guid appId = new Guid(Request.Form["ModelId"]); // the GUID stored in the hidden field
    ExampleModel example = db.Entities.Single(e => e.ModelId == appId);

    UpdateModel(example, formValues);
    db.SaveChanges();

    return RedirectToAction("ExampleAction2", new { appId = appId.ToString() });
}

あらゆる種類の開発経験を持つ人なら誰でも、ブラウザの開発者ツールで非表示フィールドの値を編集できることを知っているので、これは安全ではないことを私は知っています。では、同じ結果を安全に得るための推奨される方法は何ですか?

4

3 に答える 3

4

Sessionオブジェクトに保存する必要があります。そうすれば、いつでもどこからでも呼び出すことができ、どのビューにも表示されません。ドキュメント: http: //msdn.microsoft.com/en-us/library/ms178581.aspx

于 2012-07-17T23:34:26.157 に答える
1

私はこれが答えられたことを知っています、ただ興味のために私は別のオプションを残したいと思います。最初のビューから取得した情報をJSON文字列として解析し、Cookieに保存して、後で必要なときにシリアル化する方法があります。

これは、情報がクライアント側に安全に保存されることを前提としています。そうでなければ、それは私が推測する暗号化されたクッキーである可能性があります。これにより、クラウドコンピューティングやロードバランサーなどの懸念に対処できます。

于 2014-05-11T13:12:51.610 に答える
0

RedirectToActionを使用する代わりに、各ステップに投稿してみませんか?このようにして、各ステップを含むモデルを作成できます。次に例を示します。

class JobApplicationViewModel
{
    public Guid ApplicationGuid { get; set; }
    public StepOne Step1 { get; set; }
    public StepTwo Step2 { get; set; }
    public int CurrentStep { get; set; }
}

ステップ1のビューは、ステップ2に投稿できます。例:

[HttpPost]
public ViewResult StepTwo(JobApplicationViewModel viewModel)
{
    ServiceLayer.Update(viewModel);
    return View(viewModel);
}

次に、StepTwoビューはStepThreeに投稿し、StepThreeはStep4に投稿します。これは論理的に意味があります。これは、フォームを投稿することによって、ステップ1以降のステップにのみアクセスできるようにするためです。

于 2012-07-18T00:05:02.627 に答える