最常见的 "best" 清理和验证 PHP 表单的方法?

The most common, "best" way to sanatize and validate PHP Forms?

在多次尝试编写可以 sanatize/validate $_POST["input"] PHP 形式的代码后,我不得不问总的来说,因为每次尝试都没有像我预期的那样奏效。我真的尝试了很多,2 个月前我才开始练习编码(html、css、bootstrap、wordpress、php)。我希望你能告诉我,如你所见,什么是最常见的或 "best" 消毒 php 表格的方法。

我重写了一些 OOP PDO 表单验证,当我将它集成到新主页时无法运行,因为我的 OOP 技能 = 0。

它是用 类 构建的,但我没有看到任何准备好的语句,这让我很惊讶,因为准备好的语句在网络上被偶像化了。

哪种方法更好,你能告诉我为什么吗?

我希望你能回答我的问题并解释一下我如何在 "pro-way" 中处理它,这在最好的情况下是安全的,因为它对我来说是一个障碍。

感谢您的帮助。

首先,您不应该在任何上下文中连接验证和 "sanitization"。那是两个完全不同的事情,

验证确实必须应用于表单数据,并且没有通用的方法来执行此操作。只需使用您的常识、业务逻辑需求和框架准则。

而"sanitization"则另当别论。甚至这个词本身也是 PHP 人最大的错误,总是被误用和混淆。

"sanitize" 的最佳方法是根本不进行消毒。因为

  1. 你不能"sanitize"你的数据,不管你在术语下的意思是什么。
  2. 任何 "sanitization" 都会破坏数据。
  3. 这个数据实际上可能有很多目的地。你不可能拥有一劳永逸的解决方案。
  4. 重要的是目的地,而不是来源。意味着您不应该将准备好的语句用于 POST 变量,而是用于 SQL 查询。大不同。

您应该格式化,而不是"sanitize"。根据特定当前目的地的规则进行格式化。

要为 SQL 查询格式化数据,您必须使用准备好的语句。
要为其他目的地格式化您的数据,您必须遵守他们的规则。再一次,不是 "post form" 而是所有数据,尽管其来源。

"Your Common Sense"的答案绝对正确。

所以你应该首先验证你的表单(客户端),有很多小的验证库,例如:http://rickharrison.github.io/validate.js/

在 posted 时,您必须检查此数据是否符合您的预期。 电子邮件只是一封电子邮件,名称只是一个没有 XSS 或 SQL 注入东西的字符串.....

所以要看上面回答说的目的地。

要过滤某些 post 值,例如:http://php.net/manual/en/function.filter-var.php

您还可以使用完整的框架或库来对抗 sql 注入和 XSS 东西。你应该使用 MySQLi prepared statements 和一些其他的东西来对抗 XSS,比如:HTMLPurifier http://htmlpurifier.org/

这些只是一些示例,如果您有兴趣,我建议您阅读此页面:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet