【问题标题】:Should I duplicate the form validation on client side in server side just like client side validations?我应该像客户端验证一样在服务器端复制客户端的表单验证吗?
【发布时间】:2017-09-22 22:15:49
【问题描述】:

一个人可以来创建一个帐户。 我在客户端实现了很好的验证,例如,如果他没有提供有效的电子邮件地址,我会立即通知他这不是有效的电子邮件(使用客户端 JavaScript)。

但客户端验证很容易被攻击者绕过。所以我也在服务器端使用了相同的验证。但不同的是用户体验。例如,如果客户端的 JavaScript 被禁用并且用户提供了无效的电子邮件,应用程序只会告诉他错误(在提交表单并刷新页面之后)。没有更多信息。 (因为我假设他是攻击者,所以我的网站对于攻击者来说应该有糟糕的用户体验)。

现在我的问题是:如果我这样做,我的网站的用户体验会好吗? (在客户端向用户报告了很大的错误,但在服务器端却很糟糕,服务器端只会在提交整个表单以进行任何失败的验证后返回“错误”)。

更多解释:

当用户在输入中输入无效文本时,应用程序会在输入的底部用红色文本告诉他他没有输入有效文本。 (由于客户端 JavaScript 会发生这种情况)。

但是,如果客户端 JavaScript 以某种方式被禁用并且用户在输入中键入了无效文本,则服务器端将在页面提交后仅向用户返回“错误”。

【问题讨论】:

    标签: javascript php validation security user-experience


    【解决方案1】:

    由于您已经在进行服务器端验证,因此问题在于您是否仍想为无论出于何种原因未获得客户端验证的用户提供可比较的用户体验,这取决于您。

    我不认为 100% 安全地假设禁用 JavaScript 的每个人都是不好的,但是没有 JavaScript 的合法用户的百分比可能足够小,你不需要投资于为他们提供相同水平的用户体验。 This Q&A on ux.stackexchange.com 可能会对此提供一些见解。 (有点老了,但我认为它的观点仍然有效。)

    一个合理的折衷方案可能是在您的通用错误中添加一个<noscript> 标记,并带有一条消息,通知他们在禁用 JS 时他们不会看到详细的错误。

    【讨论】:

      【解决方案2】:

      从不依赖客户端验证。它可以很容易地被绕过。 总是在服务器端验证。客户端验证很不错,因为它可以提供即时反馈,从而提供更好的用户体验。但是您可以依赖的唯一验证是用户无法破坏的验证,这意味着它必须驻留在服务器上(或不在客户端浏览器/设备中的任何地方)。

      【讨论】:

      • 是的,这正是我所做的。但是服务器端是否应该返回有关问题所在的良好信息?或者在每次失败的表单验证时都可以使用类似“错误”的消息?因为我假设他是攻击者,所以用户体验越差越好。请阅读更多解释。
      • IMO 如果用户正在破坏您的客户端验证,我根本不在乎他们是否收到好的消息,因为他们无论如何都试图闯入。
      • 所以只有黑客和恶意用户会在客户端禁用javascript?普通用户是否禁用了它,所以我需要在服务器端有一个高用户体验的错误报告系统,以防客户端 javascript 被禁用?
      • 始终假设您的用户同时是恶意的愚蠢的。尽量提供帮助,但不要给他们任何有助于打败你的系统的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多