【问题标题】:onKeyup OR onBlur is better for check username existence? [closed]onKeyup 或 onBlur 更适合检查用户名是否存在? [关闭]
【发布时间】:2018-04-24 13:55:29
【问题描述】:

我正在为我的第一个注册表单的用户检查功能而苦苦挣扎。在这种情况下,我无法确定哪个更好:onKeyuponBlur

我的代码使用 ajax 动态检查数据库中是否存在用户名(在提交表单之前)。

我的主要担忧是

使用 onKeyup: 如果有人输入:'John' 警报会立即弹出并说它已被占用,但也许我们的访问者试图输入 ' JohnDoe' 并且从不想注册 'John'。这样,每个用户都可以通过简单的单词猜测/输入任何内容来找到许多已经使用的用户名。这让我很困扰,因为这似乎是一个很大的安全风险。

使用 onBlur:如果有人输入“John”并走得更远(点击离开),警报会立即弹出并说用户名已被占用。没关系,但正常的用户反应是:输入另一个名称并等待。 (点击不是很明显)。这样用户每次都需要点击退出才能看到当前的结果。我认为这真的很烦人(而且绝对不是哑巴)

哪个更好?你用哪一个?或者有没有比这两个更好的选择来进行用户友好的“动态”用户存在检查?

谢谢!

【问题讨论】:

  • 两者都不是。使用input。如果我使用鼠标复制内容,您最初提到的任何事件都不会触发。
  • 这是一个非常基于意见的问题,所以不是一个真正合适的问题,但请考虑使用“去抖动”,以便在用户停止输入一段时间后,它会执行检查。
  • 我还建议您可能想多了。无论如何,您似乎担心有人会发现什么是公共信息。如果您想阻止有人抓取您的网站,请实施某种形式的限速逻辑,以阻止单个(或一组)IP 地址向您的网站发出大量请求。
  • 我个人认为另一个问题是你告诉用户用户名被占用的方法;一个警报。警报非常具有破坏性。靠近输入框的简单消息,可选择在框上更改彩色边框,不仅会通知用户用户名已被使用,而且破坏性要小得多。
  • 感谢大家的意见/信息,这在很多方面真的很有帮助! @Taplar:幸运的是,我的警报框不是基本的 javascript“alert()”框,它只是一个基于 div 的小工具提示,在输入字段下弹出警报。但是感谢您指出这一点!

标签: javascript jquery forms on-the-fly


【解决方案1】:

我认为这在很大程度上是个人喜好问题。我不会太担心暴露用户名的存在。无论您采用何种方法,总有一种方法可以找出哪些名称已经存在,方法是一遍又一遍地提交表单,或者通过反复模糊输入。

从可用性的角度来看,我认为模糊要求并不明显,正如您所提到的。我会采用 keyup 方法,因为它允许用户根据即时反馈快速更改其用户名。

但是,在每次按键时执行 GET 查询确实会导致竞争条件,在这种情况下,可能会在处理完后续按键后返回对按键的响应。因此,请务必在发送新请求之前取消或完成任何以前的 AJAX 请求。这可以使用 AJAX 队列来完成。

取消以前的请求也有助于防止您提到的暴力用户名抓取场景,因为恶意用户必须等待每个请求完成才能输入新字符。考虑到网络延迟,暴力攻击方法在获取大量用户名时不会取得太大成功。

【讨论】:

  • 非常感谢,真的很有帮助!
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多