将用户名和密码发送到身份验证服务器时应考虑哪些最佳实践?

发布于 2025-01-01 09:33:33 字数 114 浏览 0 评论 0原文

我想知道使用 ajax 向身份验证服务器发送用户名和密码时需要记住哪些事情。我正在使用 PhoneGap 和 jQuery 开发一个 Web 应用程序,我对此非常陌生,我想确保我以正确的方式进行操作。欢迎任何建议。

I'm wondering what sorts of things I need to keep in mind when sending a username and password to an authentication server using ajax. I'm using phoneGap and jQuery to develop a web app, which I'm very new to, and I want to make sure I go about it the right way. Any advice is welcome.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小霸王臭丫头 2025-01-08 09:33:33

您应该使用挑战-响应机制。

服务器应向客户端发送不可重复使用的过期随机数和用户的盐。
客户端应该使用盐对密码进行哈希处理,使用随机数对生成的哈希值进行哈希处理,然后将该哈希值发送回服务器。

服务器应在其数据库中存储预加盐的密码哈希值。
然后,它应该使用随机数对存储的哈希值进行哈希处理,并将其与来自客户端的哈希值进行比较。

这使得攻击者无法得知原始密码,即使攻击者是活跃的中间人并窃取了数据库。
但是,如果攻击者窃取了数据库,他将能够通过绕过您的 UI 并使用已知的哈希来登录。

You should use a challenge-response mechanism.

The server should send the client a non-reusable expiring nonce and the user's salt.
The client should hash the password with the salt, hash the resulting hash with the nonce, and send that hash back to the server.

The server should store pre-salted password hashes in its database.
It should then hash the stored hash with the nonce, and compare that to the hash from the client.

This makes it impossible for an attacker to learn the original password, even if the attacker is an active man-in-the-middle and has stolen the database.
However, if the attacker steals the database, he will be able to login by bypassing your UI and using the known hash.

陪你搞怪i 2025-01-08 09:33:33

这是您自己构建的应用程序,还是您将与现有的基于网络的服务对话?

假设 HTTPS 可用,则必须使用 HTTPS。如果您自己构建网站,我建议您研究基于令牌的系统,类似于许多流行网站使用的系统。

基本流程如下:

  • 您(开发人员)在网站上注册以获得 API 密钥以及可能的某种令牌。
  • 在您的应用程序中,您将用户的密码与应用程序的令牌结合起来,并通过哈希算法运行它们。
  • 您的应用程序将哈希密码以及您的 API 密钥提交到服务器。
  • 如果用户的凭据通过检查,服务器会回复一个身份验证令牌,该令牌只是一个短代码。您的应用程序必须在向服务器发出的每个请求中包含此令牌。
  • 身份验证令牌可能会在某个时候过期,因此您可能需要在某个时候重新进行身份验证。

一般来说,避免以纯文本形式存储用户密码。以与服务器身份验证系统兼容的形式对其进行哈希处理,然后存储该值。

Is this an app you're building yourself, or will you be talking to an existing web-based service?

Using HTTPS is a must, assuming it's available. If you're building the website yourself, I'd recommend looking into a token-based system, similar to those used by many popular websites.

The basic flow goes like this:

  • You, the developer, register with the site for an API key and possibly a token of some kind.
  • In your app, you combine the user's password with your app's token and run them through a hashing algorithm.
  • Your app submits the hashed password, along with your API key, to the server.
  • If the user's credentials check out, the server replies with an authentication token, which is just a short code. Your app has to include this token with every request to the server.
  • Authentication tokens may expire at some point, so you may need to reauthenticate at some point.

In general, avoid storing the user's password in plain text. Hash it in a form that's compatible with the server's authentication system, and then store that value.

抚你发端 2025-01-08 09:33:33

我用过雷蒙德的例子。我还在客户端有哈希密码。

http://www.raymondcamden .com/index.cfm/2011/11/10/基于服务器的登录与 PhoneGap 示例

I've used Raymond's examples. Also i've hash password in client side.

http://www.raymondcamden.com/index.cfm/2011/11/10/Example-of-serverbased-login-with-PhoneGap

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文