【发布时间】:2012-04-03 12:04:31
【问题描述】:
我想在使用 AjaxSubmit 函数在 Jquery 上提交表单之前覆盖“密码”字段的值。 我知道我可以只更新输入字段上的值,但是我不希望用户看到这个转换。换句话说,我只想向密码字段发送一个自定义值,并将当前值保留在屏幕上...
我该怎么做?
我当前的代码:
var loginoptions = {
success: mySuccessFuction,
dataType: 'json'
}
$('#My_login_form').submit(function(e) {
e.preventDefault();
var pass=$("#My_login_form_password").val();
if (pass.length>0){
loginoptions.data={
password: ($.sha1($("#My_login_form_csrf").val()+$.sha1(pass)))
}
$("#My_login_form").ajaxSubmit(loginoptions);
delete loginoptions.data;
});
此代码的问题在于它发送了一个带有表单字段值的“密码”POST 变量,以及一个重复的变量,其中的值是我在“loginoptions.data”上设置的值。
【问题讨论】:
-
你可以只使用 jQuery.post 而不是 ajaxform 插件。这样您就可以更好地控制要发送的数据。
-
我认为您不需要在客户端散列密码。对于 mtim-attacks,无论您发送明文密码还是仅发送哈希,都没有区别。在每种情况下,您都需要对密码服务器端进行散列和加盐。大多数情况下,无论如何使用现有的身份验证模块会更安全。
-
我更喜欢使用 ajaxSubmit 函数,但是,如果没有办法这样做,我想我会把它改成 post 你说 Andbdrew。
-
@Christoph 我正在为每个表单请求生成一个盐 (csrf)。发送的密码是 hash(password)+hash(salt) 的结果,并且在每个请求中都不同。它仍然容易受到 MITM 攻击吗?
-
是的。没有区别,攻击者要么获得密码要么获得哈希,因此他可以使用密码或哈希向服务器验证自己的身份。如果你真的很关心安全,你需要使用 SSL。如果不是,可以只发送密码并在服务器端执行所有安全操作(散列、超时等)。
标签: ajax jquery jqueryform