对PHP表单进行整理和验证的最常见,“最佳”方法是什么?

时间:2015-09-04 10:23:47

标签: php forms validation pdo prepared-statement

经过多次尝试编写一个能够以PHP格式整理/验证$ _POST [“input”] 的代码后,我不得不一直询问它,因为每次尝试都不起作用我期望。我真的尝试了很多,我刚开始用2个月前的编码运动(html,css,bootstrap,wordpress,php)。我希望您可以告诉我,正如您所看到的,对PHP表单进行整理的最常用或“最佳”方式是什么。

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

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

首先,您不应该在任何上下文中连接验证和“清理”。这是两个完全不同的问题,which, alas, confuse too many people

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

虽然“消毒”是另一回事。即使这个词本身也是PHP人员最大的错误,总是被误用和混淆。

“消毒”的最佳方法不是完全消毒。因为

  1. 无论您的意思是什么,都无法“清理”您的数据。
  2. 无论什么“消毒”都会破坏数据。
  3. 这些数据实际上有很多目的地。你无法拥有一对一的解决方案。
  4. 目的地,不重要的来源。意味着您应该使用预准备语句而不是POST变量,而是SQL查询。差异很大。
  5. 你应该格式化,而不是“消毒”。根据当前特定目的地的规则格式化。

    要格式化SQL查询的数据,您必须使用预准备语句 要格式化其他目的地的数据,您必须遵守其规则。而且,不是“发表形式”,而是所有数据,尽管有其来源。

答案 1 :(得分:0)

答案"你的常识"绝对正确。

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

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

所以它取决于目的地,如上面的答案所说。

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

您还可以针对sql Injection和XSS使用完整的框架或库。您应该使用MySQLi预处理语句来对抗XSS,例如:HTMLPurifier http://htmlpurifier.org/

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