ViewModel数据在地址栏中传递

时间:2017-11-12 08:29:50

标签: asp.net-mvc viewmodel

我有更改密码控制器。 用户更改密码并单击“提交”。 我有我的人物视图模型。 我根本没有将它传递给我的成功页面。

return View("succsessFulLogin");

我仍在接受

http://localhost:50010/Password/ChangePassword?AccountName=username&CurrentPassword=currentPassValue&NewPassword=newPassValue&NewPasswordCheck=newCheckPassValue

在地址栏中

这是我在页面上的代码:

@using (Html.BeginForm("ChangePassword", "Password", FormMethod.Get))
{
    @Html.HiddenFor(model => model.AccountName)
    <br />
    <div>
        <h4>@Html.LabelFor(m => m.CurrentPassword)</h4> @Html.PasswordFor(m => m.CurrentPassword, new { onkeydown = "capLock(event);" } ) @Html.ValidationMessageFor(m => m.CurrentPassword)
    </div>
    <br />
    <div>
        <h4>@Html.LabelFor(m => m.NewPassword)</h4> @Html.PasswordFor(m => m.NewPassword, new { onkeydown = "capLock(event);" }) @Html.ValidationMessageFor(m => m.NewPassword)
    </div>
    <br />
    <div>
        <h4>@Html.LabelFor(m => m.NewPasswordCheck)</h4> @Html.PasswordFor(m => m.NewPasswordCheck, new { onkeydown = "capLock(event);" }) @Html.ValidationMessageFor(m => m.NewPasswordCheck)
    </div>
    <br />
    <p>
        <button class="btn-lg" type="submit">@Global.SAVE</button>
    </p>
}

2 个答案:

答案 0 :(得分:1)

我不同意奥斯曼拉希米。

使用HTTP POST 绝不比HTTP GET更安全更安全!只要您通过http将所有内容作为明文传递,您就可以读取传入和传出服务器的任何内容,即使它没有显示在地址栏中。如果您想亲自检查我,您只需下载fiddler,检查您的页面生成的请求和回复,并亲自查看。

在网络上传输密码的正确方法是确保您使用SSL并对密码进行哈希处理。我绝不是这方面的专家,但我认为你会在这些答案中找到需要:

  1. Securely Transfer User Entered Password
  2. How should password be transfered for logon in Asp.net Identity
  3. How to securely save and send login username/password?

答案 1 :(得分:0)

当您使用HTTP GET时,浏览器会在URl中发送数据,因此您的限制最多为2048 characters

know more about HTTPGET and HTTPPOST

保护您的数据安全并受到保护更改您的方法要POST这样:

    @using (Html.BeginForm("ChangePassword", "Password" FormMethod.Post, null))
{}

然后将[HTTpPost]添加到Action Method中的controller,例如:

    [HttpPost]
    public ActionResult ChangePassword(yourmodel model){}