清理和验证 PHP 表单的最常见的“最佳”方式?

Posted

技术标签:

【中文标题】清理和验证 PHP 表单的最常见的“最佳”方式?【英文标题】:The most common, "best" way to sanatize and validate PHP Forms? 【发布时间】:2015-11-30 11:24:57 【问题描述】:

在多次尝试编写可以 sanatize/validate $_POST["input"]php 表单中的代码之后,我不得不总体上询问它,因为每次尝试都无法正常工作我期望。我真的尝试了很多,两个月前我才开始练习编码(html、css、bootstrap、wordpress、php)。如您所见,我希望您能告诉我,清理 php 表单的最常见或“最佳”方式是什么。

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

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

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

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

感谢您的帮助。

【问题讨论】:

【参考方案1】:

首先,您不应该在任何情况下将验证和“清理”联系起来。这是两个完全不同的问题,which, alas, confuse too many people。

验证确实必须应用于表单数据,并且没有通用的方法来做到这一点。只需使用您的常识、业务逻辑需求和框架指南即可。

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

“消毒”的最佳方式是根本不消毒。因为

    您无法“清理”您的数据,无论您在该术语下是什么意思。 无论怎样“清理”都会破坏数据。 实际上,此数据可能用于许多目的地。您不可能拥有一劳永逸的解决方案。 重要的是目的地,而不是来源。意味着您不应该将准备好的语句用于 POST 变量,而是用于 SQL 查询。大不同。

您应该格式化,而不是“清理”。根据当前某个目的地的规则进行格式化。

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

【讨论】:

1.我的意思是验证,例如给出一个输入属性(最小/最大长度,不允许的字符等等。)【参考方案2】:

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

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

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

所以这取决于上面的答案所说的目的地。

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

您还可以针对 sql 注入和 XSS 使用完整的框架或库。您应该使用 mysqli 准备好的语句和其他一些针对 XSS 的东西,例如:HTMLPurifier http://htmlpurifier.org/

这些只是一些例子,如果你有兴趣我推荐你阅读这个页面:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

【讨论】:

以上是关于清理和验证 PHP 表单的最常见的“最佳”方式?的主要内容,如果未能解决你的问题,请参考以下文章

清理和验证表单php

Flask表单

使用表单元素多次更新数据库

用户通过身份验证后触发功能的最佳方式

“重新初始化”/清理类实例的最短和最佳方法

Laravel 记录表单请求验证实际错误消息的最简单方法