【问题标题】:PHP sanitisation for user input用于用户输入的 PHP 清理
【发布时间】:2012-01-07 05:21:45
【问题描述】:

我已经阅读了很多关于清理用户输入的利弊的争论,但无论哪种方式似乎都没有明确的答案。

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

我是否需要担心清理用户输入?很多人似乎在说不需要在途中进行消毒,而其他人则说您永远不应低估尽可能进行消毒的必要性。

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

【问题讨论】:

  • 软件开发中有很多有争议的问题,但我不知道清理用户输入会是其中之一。
  • “你永远不应该低估消毒的必要性。”
  • 安全总比后悔好,对吧?您是否有不想清理输入的原因?
  • @wescrow 不,完全没有理由 - 我只是想建立某种共识,所以我完全正确。

标签: php forms user-input sanitization


【解决方案1】:

此时有两点很重要:

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

在此处查看 SQL 注入文档:

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

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

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

【讨论】:

  • 验证电子邮件是与数据清理相关的第二个最重要的点?
【解决方案2】:

总是这样做。它只需要您多花几分钟的时间。它真的没有缺点。为什么要冒险?

【讨论】:

  • 在某些情况下,清理可能会出现问题。您正在更改用户数据。这实际上取决于数据和应用程序。在清理风险相对较低的地方进行清理,并改善您作为必须处理数据的人的生活。其他一切,请验证。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • @Fleep:验证是消毒的先决条件
    • @hakre:这不是真的。在某些情况下,您希望在验证之前进行清理 - 事实上很多情况。考虑上面的情况。假设我们从输入中收到一封电子邮件。在验证它之前对其进行清理(删除尾随/前导空格,使其小写)是有意义的(例如,空格/换行符在电子邮件中是不合法的,但用户可能只是在之前/之后不小心打了一个空格) .清理数据不仅仅意味着防止 SQL 注入/XSS/CSRF。这也意味着清理数据以使其可用。
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

      输入验证是指在使用应用程序之前验证应用程序的所有输入的过程。 输入验证对于应用程序的安全性至关重要,大多数应用程序风险都涉及到某种程度的污染输入。 许多应用程序没有计划输入验证,而是由各个开发人员决定。 这是灾难的根源,因为不同的开发者肯定都会选择不同的方法,而且很多人会为了追求更有趣的开发而忽略它。

      阅读更多:Data Validation

      【讨论】:

        猜你喜欢
        • 2012-10-02
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-26
        相关资源
        最近更新 更多