地址栏中传递的 ViewModel 数据
ViewModel data being passed in address bar
我有修改密码的控制器。
用户更改密码并单击提交。
我有我的人 p 的视图模型。
我根本没有将它传递到我的成功页面。
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>
}
当您使用 HTTP GET
时,浏览器在 URl
中发送数据,这样您最多可以限制 2048 characters
.
know more about HTTPGET and HTTPPOST
为了确保您的数据安全和受保护,将您的方法更改为 POST 像这样:
@using (Html.BeginForm("ChangePassword", "Password" FormMethod.Post, null))
{}
然后将 [HTTpPost]
添加到 controller
中的 Action Method
,例如:
[HttpPost]
public ActionResult ChangePassword(yourmodel model){}
我不同意 osman Rahimi。
使用 HTTP POST绝不比 HTTP GET 更安全!只要您通过 http 以明文形式传递所有内容,您就可以读取传入和传出服务器的任何内容,即使它没有显示在地址栏中。如果你想自己检查我,你所要做的就是下载 fiddler,检查你的页面生成的请求和响应,然后你自己看看。
在网上传输密码的正确方法是确保您使用的是 SSL 并对密码进行哈希处理。我绝不是这方面的专家,但我认为您会在这些答案中找到需要:
- Securely Transfer User Entered Password
- How to securely save and send login username/password?
我有修改密码的控制器。 用户更改密码并单击提交。 我有我的人 p 的视图模型。 我根本没有将它传递到我的成功页面。
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>
}
当您使用 HTTP GET
时,浏览器在 URl
中发送数据,这样您最多可以限制 2048 characters
.
know more about HTTPGET and HTTPPOST
为了确保您的数据安全和受保护,将您的方法更改为 POST 像这样:
@using (Html.BeginForm("ChangePassword", "Password" FormMethod.Post, null))
{}
然后将 [HTTpPost]
添加到 controller
中的 Action Method
,例如:
[HttpPost]
public ActionResult ChangePassword(yourmodel model){}
我不同意 osman Rahimi。
使用 HTTP POST绝不比 HTTP GET 更安全!只要您通过 http 以明文形式传递所有内容,您就可以读取传入和传出服务器的任何内容,即使它没有显示在地址栏中。如果你想自己检查我,你所要做的就是下载 fiddler,检查你的页面生成的请求和响应,然后你自己看看。
在网上传输密码的正确方法是确保您使用的是 SSL 并对密码进行哈希处理。我绝不是这方面的专家,但我认为您会在这些答案中找到需要:
- Securely Transfer User Entered Password
- How to securely save and send login username/password?