【问题标题】:Validation Issue PHP验证问题 PHP
【发布时间】:2011-01-07 17:51:06
【问题描述】:

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

【问题讨论】:

    标签: php validation


    【解决方案1】:

    是的,你应该 - 如果用户禁用了 Java 脚本怎么办?

    如果您要在任何地方省略验证 - 您应该在客户端省略它。

    【讨论】:

    • 您要在服务器端考虑的另一件事是清理数据以防止 SQL 注入攻击。你不想留下像这样巨大的安全漏洞 - 只是因为它需要更多的努力,特别是当它们很容易处理时:-)
    【解决方案2】:

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

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

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

    【讨论】:

    • 好的。所以这是这种情况,我在第 1 页上有一个表格,它正在将数据发布到第 2 页。现在,如果输入中有错误,我会做一个回显来告诉用户这个错误。它会自动进入第2页。如何解决这个问题?
    • 您已将数据发送到第 2 页,因此您需要第 2 页再次显示表单,使用已提交的数据填充输入,并标记相关错误。
    • 通常在 page1 和 page2 之间执行一些 PHP 脚本(即 PHP 触发 page2 的加载)。因此,在您的 PHP 脚本中,如果出现错误,您应该将用户返回到 page1,例如,将参数 ERROR 设置为将显示给用户的消息。在 page1 中检查是否设置了参数。例如。 myserver.com/… 。这只是一个例子,还有很多其他的方法,比如将用户送回page1,重新显示带有用户参数的FORM,以及缺少的红色并显示错误消息。
    【解决方案3】:

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

    【讨论】:

    • 您可以尝试的最简单方法:关闭浏览器中的 javascript。
    【解决方案4】:

    是的,是的,当然是的!

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

    1. 利用最新的浏览器表单验证功能http://diveintohtml5.ep.io/forms.html#validation
    2. (如果 1 不可能,另外)在提交事件上运行 JS 验证
    3. 运行检查并将错误传递给应用程序逻辑中的视图
    4. 在业务逻辑中检查并抛出异常

    【讨论】:

      【解决方案5】:

      您应该始终一开始就在服务器端执行验证,然后才进行客户端验证。 (反之亦然,只要实现了服务器端验证)。

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 转义输出是什么意思?
        • 这就是web app的原则,即使你对输入进行过滤和验证,你在输出的时候还是应该对数据进行转义,以防止xss攻击。您永远不知道在过滤和验证过程中可能遗漏了什么。
        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多