当前位置: 首页 > 知识库问答 >
问题:

在PHP ajax中分别验证用户名和密码

宰父飞白
2023-03-14

我有一个登录表格。如下:

<form id="myform"  method="POST" class="form_statusinput">
   <div class="input-group">
     <span class="input-group-addon"><i class="fa fa-user"></i></span>
     <input type="email" class="form-control" id="email" name="email" 
      placeholder="Enter email" data-original-title="" title="" 
      onblur="checkEmail()">
      </div>
      <br>
      <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-lock"></i></span>
      <input type="password" class="form-control" id="password" name="password" 
       placeholder="Password" data-original-title="" title="" 
       onblur="checkPass()">
     </div>
</form>       

我在提交表单时通过Ajax验证用户名和密码

$(document).ready(function(){ 
  $("form#myform").submit(function(event) {
  event.preventDefault();
  validate();
  });
});

Validate函数中,可以正确地对空字符或无效字符进行验证,但我想向用户返回密码错误或用户名错误的错误。

Ajax调用如下:

$.ajax({
    url: "includes/fo_submit",
    type: "POST",
    data: dataString,
    success: function (msg) {
        if (msg == 1) {
            $("#loading").hide();
            window.location.reload();
        } else {
            $("#loading").hide();
            $("#messagesuccerr").html("Wrong Credentails")
            .fadeIn().delay(4000).fadeOut();
            return false;
        }
    }
}); 

fou submit具有PHP数据库连接和代码

$query = "select * from `register_userfm` where `userchkname_yt` = ? 
and passchk_ty = ?; ";
$result = DB::instance()->prepare($query)->execute(array($_POST['email'],
$_POST['password']))->fetchAll();
if(count($resultfm1)>0){
    echo 1;
}
else{
    echo 0;
}

这样,返回的唯一错误是“无效凭据”。请让我知道如何分别验证用户名和密码。

共有1个答案

施英哲
2023-03-14

您可以使用状态代码,通过运行2个不同的查询从PHP脚本返回它们。类似以下内容:

$query = "select * from `register_userfm` where `userchkname_yt` = ? and passchk_ty = ?; ";
$result = DB::instance()->prepare($query)->execute(array($_POST['email'], $_POST['password']))->fetchAll();
if(count($result)>0){
    echo "1"; //auth success
}
else{
    $query = "select * from `register_userfm` where `userchkname_yt` = ?;";
    $result = DB::instance()->prepare($query)->execute(array($_POST['email']))->fetchAll();
    if(count($result)>0){
        echo -1; //password wrong
    }
    else{
        echo 0; //username wrong
    }
}

然后,您可以在ajax回调中检查返回的值并相应地执行操作。

建议:向可能的攻击者提供此信息(他出错的地方)可以大大缩短暴力/字典攻击所需的时间

 类似资料:
  • 我正在尝试在SoapUI中发出SOAP请求,它需要使用用户名和密码进行身份验证。我让SoapUI基于wsdl文件生成一个测试,并尝试调用该服务。我按照SoapUI网站上的步骤使用身份验证(https://www.soapui.org/soap-and-wsdl/authenticating-soap-requests.html),但我不能让它工作。我不熟悉SOAP,所以我可能缺少一些基本的东西。我

  • 客户已创建密钥存储库并存储凭据。为了验证密钥存储库,我已经在节点中创建了应用程序,并使用客户端id和客户端机密,我能够读取机密。但是现在客户不想使用客户id和客户机密,而是使用AZURE的用户名和密码来访问程序中的keyvault。它是一个没有MFA的keyvault访问的专用用户。 我不确定我们是否可以从节点JS使用用户名和密码访问keyvault。敬请建议。 谢谢

  • 接口说明 用来验证输入的用户名称是否已注册 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/validateUserName 是否需要登录 否 请求字段说明 参数 类型 请求类型 是否必须 说明 username string form 是 用户名 响应字段说明 参数 类型 说明 usernameVa

  • 我对仅使用bcrypt的用户名和密码的用户注册验证有特定要求(没有设计!) 我目前正在工作: 我需要: 用户名: 只能包含字母、数字、短划线和下划线 必须至少包含一个大写字母、一个特殊字符、一个数字和一个小写字母

  • 问题内容: 正在尝试在提示(URL给定)中输入数据,以下代码给我一个错误。请帮我这些吗? 我尝试过: 这也是行不通的。 问题答案: 当你一起工作通过 3.6.1可以绕过通过嵌入的弹出和在自身如下。 此解决方案将打开URL http://the-internet.herokuapp.com/basic_auth并使用有效的username和password凭据进行身份验证。

  • 是否可以在Flatter中使用用户名和密码(而不是电子邮件和密码)实现Firebase身份验证?有没有办法用Firebase Auth插件来实现这一点?