我应该像客户端验证一样在服务器端复制客户端的表单验证吗?
Should I duplicate the form validation on client side in server side just like client side validations?
一个人可以来创建一个帐户。
我在客户端实施了很好的验证,例如,如果他没有提供有效的电子邮件地址,我会立即通知他这不是有效的电子邮件(客户端 JavaScript)。
但是客户端验证很容易被攻击者绕过。所以我也在服务器端使用了相同的验证。但区别在于用户体验。例如,如果客户端的 JavaScript 被禁用并且用户提供了无效的电子邮件,应用程序将只告诉他错误(在提交表单和刷新页面之后)。没有更多信息。 (因为我假设他是攻击者,所以我的网站对攻击者来说应该有糟糕的用户体验)。
现在我的问题是:如果我这样做,我网站的用户体验会好吗? (在客户端向用户报告的错误很大,但在服务器端却很糟糕,在提交整个表单以进行任何失败的验证后,服务器端只会 return 'error')。
更多说明:
每当用户在输入中键入无效文本时,应用程序将在输入的底部用红色文本告诉他他没有键入有效文本。 (这会发生,因为客户端 JavaScript)。
但是如果客户端 JavaScript 以某种方式被禁用并且用户在输入中键入无效文本,服务器端将 return 在页面提交后仅 'error' 给用户。
从不 依赖客户端验证。它很容易被绕过。 始终 在服务器端验证。客户端验证是一个很好的选择,因为它会提供即时反馈,从而提供更好的用户体验。但是您唯一可以依赖的验证是用户无法破坏的验证,这意味着它必须驻留在服务器上(或客户端 browser/device 以外的任何地方)。
由于您已经在进行服务器端验证,真正的问题是您是否仍想为出于某种原因未获得客户端验证的用户提供可比较的用户体验,这取决于你.
我认为禁用 每个 禁用 JavaScript 的人都不会 100% 安全,但没有 [=] 的合法用户的百分比21=] 可能足够小,您不需要投资为他们提供相同级别的用户体验。 This Q&A on ux.stackexchange.com 可能会对此提供一些见解。 (有点老了,但我觉得它的观点还是有道理的。)
一个合理的妥协可能是在您的一般错误中添加一个 <noscript>
标签,并附上一条消息,通知他们他们不会看到禁用 JS 的详细错误。
一个人可以来创建一个帐户。 我在客户端实施了很好的验证,例如,如果他没有提供有效的电子邮件地址,我会立即通知他这不是有效的电子邮件(客户端 JavaScript)。
但是客户端验证很容易被攻击者绕过。所以我也在服务器端使用了相同的验证。但区别在于用户体验。例如,如果客户端的 JavaScript 被禁用并且用户提供了无效的电子邮件,应用程序将只告诉他错误(在提交表单和刷新页面之后)。没有更多信息。 (因为我假设他是攻击者,所以我的网站对攻击者来说应该有糟糕的用户体验)。
现在我的问题是:如果我这样做,我网站的用户体验会好吗? (在客户端向用户报告的错误很大,但在服务器端却很糟糕,在提交整个表单以进行任何失败的验证后,服务器端只会 return 'error')。
更多说明:
每当用户在输入中键入无效文本时,应用程序将在输入的底部用红色文本告诉他他没有键入有效文本。 (这会发生,因为客户端 JavaScript)。
但是如果客户端 JavaScript 以某种方式被禁用并且用户在输入中键入无效文本,服务器端将 return 在页面提交后仅 'error' 给用户。
从不 依赖客户端验证。它很容易被绕过。 始终 在服务器端验证。客户端验证是一个很好的选择,因为它会提供即时反馈,从而提供更好的用户体验。但是您唯一可以依赖的验证是用户无法破坏的验证,这意味着它必须驻留在服务器上(或客户端 browser/device 以外的任何地方)。
由于您已经在进行服务器端验证,真正的问题是您是否仍想为出于某种原因未获得客户端验证的用户提供可比较的用户体验,这取决于你.
我认为禁用 每个 禁用 JavaScript 的人都不会 100% 安全,但没有 [=] 的合法用户的百分比21=] 可能足够小,您不需要投资为他们提供相同级别的用户体验。 This Q&A on ux.stackexchange.com 可能会对此提供一些见解。 (有点老了,但我觉得它的观点还是有道理的。)
一个合理的妥协可能是在您的一般错误中添加一个 <noscript>
标签,并附上一条消息,通知他们他们不会看到禁用 JS 的详细错误。