一个人可以来创建一个帐户。 我在客户端实现了很好的验证,例如,如果他没有提供有效的电子邮件地址,我会立即通知他这是无效的电子邮件(使用客户端JavaScript)。
但攻击者可以轻易绕过客户端验证。所以我也在服务器端使用了相同的验证。但不同的是用户体验。例如,如果客户端上的JavaScript被禁用并且用户提供了无效的电子邮件,则应用程序将告诉他错误(在提交表单和刷新页面之后)。没有更多信息。 (因为我认为他是攻击者,所以我的网站应该为攻击者提供糟糕的用户体验。)
现在我的问题是:如果我这样做,我的网站的用户体验会好吗? (在客户端向用户报告错误,但在服务器端报告错误,服务器端只会在整个表单提交任何失败的验证后返回'错误'。)
更多说明:
每当用户在输入中键入无效文本时,应用程序将使用红色文本在输入底部告诉他未输入有效文本。 (这将由于客户端JavaScript而发生。)
但是如果以某种方式禁用了客户端JavaScript并且用户在输入中键入了无效文本,服务器端将在页面提交后向用户返回“错误”。
答案 0 :(得分:7)
从不依赖客户端验证。它可以很容易地绕过。 始终在服务器端验证。客户端验证是一件好事,因为它可以提供即时反馈,从而提供更好的用户体验。但是,您可以依赖的唯一验证是用户不能破坏的验证,这意味着它必须驻留在服务器上(或者不在客户端浏览器/设备中的任何地方)。
答案 1 :(得分:1)
由于您已经在进行服务器端验证,问题实际上是您是否仍希望为因任何原因未获得客户端验证的用户提供类似的用户体验,这取决于您。
我不认为100%安全地假设禁用JavaScript的所有人达不到任何好处,但没有JavaScript的合法用户的百分比可能很小,你不需要投资为他们提供相同水平的用户体验。 This Q&A on ux.stackexchange.com可能会对此提供一些见解。 (它有点旧,但我认为它的观点仍然有效。)
合理的折衷方案可能是在您的通用错误中添加<noscript>
标记,并附带一条消息,通知他们在禁用JS时不会看到详细错误。