用于用户输入的PHP清理

时间:2012-01-06 21:00:28

标签: php forms user-input sanitization

我已经阅读了很多关于消毒用户输入的利弊的辩论,但无论如何,这似乎都不是一个明确的答案。

我的方案是我通过HTML / jQuery表单收集电子邮件地址,以便这些电子邮件地址可以在邮件列表中使用。在此阶段不会从数据库中检索,因此不使用JSON,XML等。

我是否需要担心消毒用户输入?很多人似乎都说不需要在途中进行卫生处理,而其他人则说你永远不应该低估消毒的必要性。

有没有人会有任何想法让这更清楚?

6 个答案:

答案 0 :(得分:1)

此时有两件事情很重要:

  • 确保用户不包含您的数据:阻止SQL注入

请参阅此处的SQL注入文档:

http://php.net/manual/en/security.database.sql-injection.php

  • 验证电子邮件地址以确保用户输入了正确的电子邮件

http://www.linuxjournal.com/article/9585

答案 1 :(得分:1)

始终这样做。这只需要几分钟的时间。它确实没有缺点。为何冒风险?

答案 2 :(得分:1)

消除任何和所有输入,无论它是否将用于输出,总是一个好主意,原因很简单,因为它是输入,因此以某种方式通过代码/编译器/系统/等。您可能不需要(根据您的使用案例)验证所有输入(例如,电子邮件地址格式的电子邮件地址与其是有效/可用的电子邮件地址),但至少要确保一组最小的清理功能,以防止XSS和SQL注入。

答案 3 :(得分:0)

应清理所有用户输入。您不能相信用户只提交有效的输入。这不是它的工作方式。总会有人试图测试代码中的弱点。

这也适用于电子邮件地址。在将数据提交到数据库之前,您应该验证它是否是有效的电子邮件地址。

答案 4 :(得分:0)

根据用例和数据类型,清理需求确实有所不同。例如,您要求用户提供电子邮件地址。您可能需要查看邮件列表中是否已存在该电子邮件。如果你没有,没问题。如果您需要避免重复,并且您的邮件列表系统不支持它自己的清除重复数据删除,则通常是安全的并且建议:

  1. trim()电子邮件输入。前导/尾随空白不是电子邮件的有意义部分,删除它们不存在风险,但它确实使电子邮件的匹配更可靠/一致。
  2. strtolower()电子邮件输入。电子邮件不区分大小写,没有真正的风险,它使匹配更可靠/一致。

答案 5 :(得分:0)

  

输入验证是指在使用之前验证应用程序的所有输入的过程。 输入验证对应用程序安全性至关重要,大多数应用程序风险都涉及某种程度的污染输入。   许多应用程序不计划输入验证,并将其留给各个开发人员。 这是灾难的一个方法,因为不同的开发人员肯定都会选择不同的方法,许多人只是为了追求更有趣的开发而放弃它。

了解详情:Data Validation