清理和验证 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 表单的最常见的“最佳”方式?的主要内容,如果未能解决你的问题,请参考以下文章