gpt4 book ai didi

jquery - 安全、可靠、正确的服务器端密码验证响应应该是什么?

转载 作者:行者123 更新时间:2023-11-29 08:42:04 29 4
gpt4 key购买 nike

我正在尝试实现一个页面,员工可以在其中登录并添加、修改、更新工作案例。

我有一个选择列表,其中包含从数据库加载的数据(员工姓名)。在这个数据库中,我有基本信息、用户名、ID、密码、电子邮件。

选择列表/框的默认值为“-”;当它更改时,会弹出一个表单,要求输入所选工作人员的密码。

使用 jQuery,我将 ID、用户和密码(纯文本)发送到服务器。在php文件中,我转义 (mysqli_real_escape_string) 所有三个变量并对密码进行哈希 (md5($salt.$varname))。

我使用SELECT * FROM table WHERE id='".$escapedId."' AND name='".$escapedName."'查询mysql数据库

检查 num_rows==1$hashedPasswd==$mysqlresult['passwd'] 后,我这样做:

$serverResponse->reponses['passwdOK']=true;
echo json_encode($serverResponse);

所以,我的两个问题是:我是否应该更改查询以包含密码(...WHERE passwd=$hashedPasswd...)以及我是否发送/返回响应JS 文件没问题(我所说的“好”是指它是否安全)。如果响应不安全,那么正确的服务器响应是什么。

附注我不想重新加载或重定向到另一个页面,事实上,如果密码没问题我想解锁/启用已加载页面上的某些控件。

最佳答案

您的方法存在一些问题:

  • 如今,MD5 完全不适合密码散列,因为它速度太快,因此很容易被暴力破解。请改用 bcrypt、scrypt 或 PBKDF。
  • 我假设您对所有密码都使用全局盐?如果是这样,这会使您的散列密码容易受到彩虹表攻击。相反,您应该为每个单独的用户随机生成一个盐并将其存储在数据库中。实现 bcrypt 等的库通常已经为您完成了加盐操作。
  • 手动转义每个查询参数然后将它们与部分查询连接对于可能导致 SQL 注入(inject)漏洞的错误非常敏感。强烈建议使用Prepared statements反而。在 PHP 中,这通常是通过 PDO 框架完成的。
  • 通过明文发送密码很危险,因此您确实应该使用 HTTPS,以便对用户和服务器之间的流量进行加密。但是,这需要您拥有证书。您可以使用自签名证书,在这种情况下,每个可以访问您的应用程序的客户端都需要配置为接受它,或者让它由Certificate Authority签名。 ,您需要为此付费。如果您不想或根本无法使用 HTTPS,最好建议您的用户不要从开放的 wi-fi 网络登录,并且不要为您的应用使用与其他操作相同的密码,例如他们的电子邮件帐户。您还可以尝试在客户端对密码进行哈希处理(并在服务器端再次进行哈希处理;不要忘记在这里也使用随机盐);这不会保护您免受中间人攻击,但可以防止被动监听器(这种情况更常见)窥探密码。

关于jquery - 安全、可靠、正确的服务器端密码验证响应应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544402/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com