Php 验证问题

Php 验证问题,php,validation,Php,Validation,我有一个表单,我在客户端验证用户交互,在服务器端验证数据完整性。现在在客户端,当输入错误或为空时,我会显示一个显示错误消息的警报框。现在在服务器端,我应该再次运行相同的检查(例如名字只能是字母表)还是应该执行其他操作?当然。你必须这么做。Javascript验证只与用户体验相关,但任何人都可以在不太了解的情况下将无效数据发送到您的服务器。是的,您应该这样做-如果用户禁用了Java脚本怎么办 如果要在任何地方忽略验证,则应在客户端忽略它。这是一个典型的表单验证问题 在客户端(浏览器)上,检查表单(

我有一个表单,我在客户端验证用户交互,在服务器端验证数据完整性。现在在客户端,当输入错误或为空时,我会显示一个显示错误消息的警报框。现在在服务器端,我应该再次运行相同的检查(例如名字只能是字母表)还是应该执行其他操作?

当然。你必须这么做。Javascript验证只与用户体验相关,但任何人都可以在不太了解的情况下将无效数据发送到您的服务器。

是的,您应该这样做-如果用户禁用了Java脚本怎么办


如果要在任何地方忽略验证,则应在客户端忽略它。

这是一个典型的表单验证问题

  • 在客户端(浏览器)上,检查表单(例如,通过JavaScript)以帮助用户快速(无需服务器交换)正确填写表单

  • 但是,用户可能输入错误/质疑您的JavaScript/编辑您的页面/绕过页面保护和控件。。。因此,您永远不信任用户输入,必须始终在服务器端仔细检查来自用户/浏览器/脚本的输入,即使用PHP


  • 您应该始终从服务器端开始执行验证,然后再执行客户端验证。(反之亦然,只要实现了服务器端验证)


    如果名字只包含字母字符对您很重要,那么您应该在服务器端实现该验证。(主题外:您不应该将名称限制为字母字符。)

    是的,正如您所写的:再次检查,因为可以避免客户端验证。如果输入无效,请执行与客户端验证和输出错误相同的检查


    请记住:过滤和验证输入,转义输出。

    无论客户端有多少验证,也必须在服务器端进行。任何恶意用户都可以通过客户端验证并将数据发送到服务器


    一个好的实践是使用Ajax使用服务器端脚本进行客户端验证,除非所检查的数据太重,通常情况下并非如此。

    是,是,是-当然

    如果您有时间,我鼓励您至少实施以下内容:

  • 利用最新的浏览器表单验证功能
  • (如果1不可能,另外)在提交事件上运行JS验证
  • 运行检查并将错误传递给应用程序逻辑中的视图
  • 检查并在业务逻辑中抛出异常

  • 您应该始终验证服务器端的所有数据

    用户端验证是提供更好用户体验的一部分,如PinuSegra所述;它还有助于降低服务器上的资源使用率(因为许多请求验证都是在客户端完成的)。但是,如果用户禁用了javascript或恶意试图篡改您的web应用程序,则它不能替代服务器验证

    做这个小实验:导航到一个应用javascript验证的表单,然后:

  • 将源(浏览器的“查看源”选项)保存到本地文件
  • 将表单操作url更改为正确的url(使用完整域,而不仅仅是/path/to/my/serverscript/)
  • 删除所有javascript验证
  • 提交错误的数据(即,只有名字上的数字)

  • 在这之后,您的数据库中现在有错误的数据。我希望这能澄清问题。

    您可以尝试的最简单方法是:在浏览器中关闭javascript。好的。所以这里是这样的,我在第1页有一个表单,它将数据发布到第2页。现在,如果输入有错误,我会做一个回音来告诉用户错误。它将自动进入第2页。如何解决此问题?您已经向第2页发送了数据,因此需要第2页再次显示表单,用已提交的数据填充输入,并标记相关错误。通常在第1页和第2页之间,会执行一些PHP脚本(即PHP触发第2页的加载)。因此,在PHP脚本中,如果出现错误,应将用户发送回page1,例如,将参数错误设置为将显示给用户的消息。在第1页中,检查参数是否已设置。例如。这只是一个例子,还有很多其他方法,比如将用户发送回page1,使用用户提供的参数重新显示表单,以及丢失的一个带有错误消息的红色表单。在服务器端,您需要考虑的另一件事是清理数据以防SQL注入攻击。你不想留下像这样巨大的安全漏洞——只是因为它需要更多的努力,特别是当它们很容易处理的时候:-)你说的转义输出是什么意思?这是web应用程序的原则,即使你过滤和验证输入,你仍然应该在输出数据时转义以防止xss攻击。您永远不知道在筛选和验证时可能遗漏了什么。