最常见的是;“最佳”;如何对PHP表单进行sanatize和验证?

最常见的是;“最佳”;如何对PHP表单进行sanatize和验证?,php,forms,validation,pdo,prepared-statement,Php,Forms,Validation,Pdo,Prepared Statement,在多次尝试以PHP形式编写一个可以sanatize/validate$\u POST[“input”]的代码之后,我不得不问一下这个问题,因为每次尝试都没有达到我的预期效果。我真的尝试了很多,两个月前我才开始练习编码(html、css、bootstrap、wordpress、php)。我希望您能告诉我,正如您所看到的,对php表单进行sanatize的最常见或“最好”的方法是什么 我重新编写了一些OOP PDO表单验证,当我将其集成到新主页时无法运行,因为我的OOP技能=0 它是用类构建的,但我

在多次尝试以PHP形式编写一个可以sanatize/validate$\u POST[“input”]的代码之后,我不得不问一下这个问题,因为每次尝试都没有达到我的预期效果。我真的尝试了很多,两个月前我才开始练习编码(html、css、bootstrap、wordpress、php)。我希望您能告诉我,正如您所看到的,对php表单进行sanatize的最常见或“最好”的方法是什么

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

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

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

我希望你能回答我的问题,并解释一下我如何以“专业的方式”处理它,这在最好的情况下是安全的,因为这对我来说是一个障碍


感谢您的帮助。

首先,在任何情况下,您都不应该将验证和“消毒”联系起来。这是两件完全不同的事情

验证确实必须应用于表单数据,没有通用的方法。只需使用您的常识、业务逻辑需求和框架指南

而“消毒”则是另一回事。甚至这个词本身也是PHP人最大的错误,经常被误用和混淆

最好的“消毒”方法是根本不消毒。因为

  • 你不能“净化”你的数据,不管你在这个术语下是什么意思
  • 任何“消毒”都会破坏数据
  • 实际上,此数据可能用于许多目的地。你不可能有一个适合所有人的解决方案
  • 重要的是目的地,而不是来源。这意味着您不应该将准备好的语句用于POST变量,而应该用于SQL查询。差别很大
  • 您应该格式化,而不是“消毒”。根据当前特定目的地的规则设置格式

    要格式化SQL查询的数据,必须使用准备好的语句。
    要为其他目的地格式化数据,您必须遵守它们的规则。再说一遍,不是“发布表单”,而是所有数据,不管其来源如何。

    关于“你的常识”的答案绝对正确

    因此,您应该首先验证表单(客户端),有许多小型验证库,例如:

    发布时,您必须检查这些数据是否与您预期的一致。 电子邮件只是一封电子邮件,名称只是一个没有XSS或SQL注入的字符串

    所以这取决于目的地,就像上面的答案所说的

    要过滤某些post值,例如:

    您还可以针对sql注入和XSS之类的东西使用完整的框架或库。您应该使用MySQLi编写的语句和其他一些东西来对付XSS,比如:HTMLPurifier


    这些只是一些例子,如果您感兴趣,我建议您阅读本页:

    1。我指的是验证,例如给出输入属性(最小/最大长度、不允许的字符等)