【发布时间】:2011-01-07 17:51:06
【问题描述】:
我有一个表单,我正在客户端验证用户交互和服务器端的数据完整性。现在在客户端,当输入错误或为空时,我会显示一个显示错误消息的警报框。现在在服务器端我应该再次运行相同的检查(例如,名字只能是字母)还是我应该怎么做?
【问题讨论】:
标签: php validation
我有一个表单,我正在客户端验证用户交互和服务器端的数据完整性。现在在客户端,当输入错误或为空时,我会显示一个显示错误消息的警报框。现在在服务器端我应该再次运行相同的检查(例如,名字只能是字母)还是我应该怎么做?
【问题讨论】:
标签: php validation
是的,你应该 - 如果用户禁用了 Java 脚本怎么办?
如果您要在任何地方省略验证 - 您应该在客户端省略它。
【讨论】:
这是一个典型的表单验证问题
在客户端(浏览器)上,您检查表单(例如通过 JavaScript)以帮助用户快速(无服务器交换)正确填写表单。
但是,用户可能会输入错误/质疑您的 JavaScript/编辑您的页面/绕过页面保护和控制...所以您永远不信任用户输入并且必须始终仔细检查服务器端来自用户/浏览器/脚本的输入,即使用 PHP。
【讨论】:
当然。你必须。 Javascript 验证只与用户体验相关,但任何人都可以在不知情的情况下将无效数据发送到您的服务器。
【讨论】:
是的,是的,当然是的!
如果您有时间,我会鼓励您至少实现以下内容:
【讨论】:
您应该始终一开始就在服务器端执行验证,然后才进行客户端验证。 (反之亦然,只要实现了服务器端验证)。
如果名字应该只包含字母字符对您很重要,那么是的,您应该在服务器端实现该验证。 (题外话:您不应该将名称限制为字母字符。)
【讨论】:
是的,正如您所写:再次检查,因为可以避免客户端验证。如果输入无效,请执行与客户端验证和输出错误相同的检查。
记住:过滤和验证输入,转义输出。
【讨论】:
无论您在客户端进行了多少验证,您也必须在服务器端进行验证。任何恶意用户都可以通过客户端验证并将数据发送到服务器。
一个好的做法是使用服务器端脚本使用 Ajax 进行客户端验证,除非检查的数据太重,但通常情况并非如此。
【讨论】:
您应该始终验证服务器端的所有数据。
正如 pinusnegra 所说,用户端验证是提供更好用户体验的一部分;它还有助于降低服务器上的资源使用率(因为许多请求验证是在客户端完成的)。但是,如果用户禁用了 javascript 或恶意尝试篡改您的 Web 应用程序,它并不能替代服务器验证。
做这个小实验:导航到您正在应用 javascript 验证的表单之一,然后:
之后,您的数据库中现在有错误的数据。我希望这能说明问题。
【讨论】: