MVC3使用ajax发送散列密码

时间:2011-03-11 21:47:14

标签: ajax asp.net-mvc asp.net-mvc-3 razor

我正在创建一个这样的登录表:

@using (Ajax.BeginForm("Login", new AjaxOptions()
{
    HttpMethod = "POST",
    OnComplete = "onComplete"
}))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <div class="editor-label">
            @Html.LabelFor(model => model.Username, "Username")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Username)
            @Html.ValidationMessageFor(model => model.Username)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Password, "Wachtwoord")
        </div>
        <div class="editor-field">
            @Html.PasswordFor(model => model.Password)
            @Html.ValidationMessageFor(model => model.Password)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Remember, "Remember me")
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Remember)
            @Html.ValidationMessageFor(model => model.Remember)
        </div>
        <p>
            <input type="submit" value="Inloggen" />
        </p>
    </fieldset>
}

现在密码通过互联网发送,以便对模型进行验证,这是不安全的。我想确保密码总是在线上进行哈希处理并防止中间嗅探器中的人。

onBegin不起作用,因为在此之后不再修改元素,还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

您可以在发布表单

之前捕获提交事件并哈希密码,从而在没有ajax的情况下执行此操作
 @using (Html.BeginForm("LogOn","Login",FormMethod.Post,new {id = "loginForm"})) {
    <div>
        <fieldset>
            <legend>Account information</legend>

            <div class="editor-label">
                @Html.LabelFor(m => m.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </div>

            <div class="editor-label">
                @Html.LabelFor(m => m.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.Password, new {id = "password"})
                @Html.ValidationMessageFor(m => m.Password)
            </div>

            <div class="editor-label">
                @Html.CheckBoxFor(m => m.RememberMe)
                @Html.LabelFor(m => m.RememberMe)
            </div>

            <p>
                <input type="submit" value="Connect"  id="submit"/>
            </p>
        </fieldset>
    </div>}

例如使用此javascript代码:

      $(function () {
          $("#loginForm").on("submit",function (e) {

              var form = $(this);
              var pass = $("#password").val();
              $("#password").val(MD5(token + MD5(pass)));

              form.submit();
          });

      });