最常见的,“最好的”一种净化和验证PHP表单的方法


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

在多次尝试编写可以在PHP表单中对$_POST["input"]进行消毒/验证的代码后,我不得不询问它的一般情况,因为每次尝试都没有像我预期的那样工作。我真的已经尝试了很多,我刚刚开始练习编码2个月前(html, css, bootstrap, wordpress, php)。我希望你能告诉我,正如你所看到的,什么是最常见或"最好"的方式来净化php表单。

我重新编写了一些OOP PDO表单验证,我不能得到运行,因为我把它集成到一个新的主页,因为我的OOP技能= 0.

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

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

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

谢谢你的帮助。

首先,在任何情况下都不应该将验证和"清理"联系起来。这是两件完全不同的事情,唉,这让很多人感到困惑。

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

而"消毒"是另一回事。甚至这个词本身就是PHP人最大的错误,总是被误用和混淆。

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

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

你应该格式化,而不是"消毒"。根据某个当前目的地的规则格式化。

要为SQL查询格式化数据,必须使用准备好的语句。
要为其他目的地格式化数据,必须遵循它们的规则。同样,不是"post form"而是所有的数据,不管它的来源是什么

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

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

当它被发布时,你必须检查这个数据是否像你期望的那样。电子邮件就是电子邮件,名字列表只是字符串没有XSS或SQL注入.....

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

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

你也可以使用完整的框架或库来对付sql注入和XSS。你应该使用mysql准备好的语句和其他一些东西来对付XSS,比如:

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

相关文章: