【问题标题】:How can I ensure my user's data is valid in PHP and MySQL? [duplicate]如何确保我的用户数据在 PHP 和 MySQL 中有效? [复制]
【发布时间】:2009-08-06 00:33:14
【问题描述】:

我有一个 Web 表单,它从用户那里获取 2 个字符串值和 2 个整数值并将它们存储在数据库中。

如何确保整数实际上是整数并清理输入,以便 Bobby Tables 不会访问我?

这是我的表单代码:

if(isset($_POST['submit']))
{
    $formTitle = $_POST['title'];
    $formAuthor = $_POST['author'];
    $formPagecount = $_POST["pagecount"];
    $formCurrentpage = $_POST["currentpage"];   
}

<form method="post" action="index.php">
    Title: <input type="text" size="25" maxlength="250" name="title" />
    <br/>
    Author: <input type="text" size="25" maxlength="250" name="author" />
    <br/>
    Page Count: <input type="text" size="25" maxlength="25" name="pagecount" />
    <br/>
    Current Page: <input type="text" size="25" maxlength="25" name="currentpage" />
    <br />
    <input type="submit" value="Add new book" name="submit" />
</form>

【问题讨论】:

    标签: php mysql validation


    【解决方案1】:

    您可能需要检查/做几件事:

    • 验证表单是否已提交:isset $_POST 组件将有所帮助
    • 检查您的数据是否“有效”:
      • 用户是否在每个字段中输入了数据?
      • 必填字段是否包含数据?
      • 检查前别忘了trim,所以包含“”的字段不算作有数据的字段
    • 检查数据实际上是您想要的方式:
      • 标题和作者是否包含字符串?长于 X 个字符?短那个 Y 个字符?任何“fordibben”字符或值?
      • 另外两个字段是否包含数字数据?积极的 ?只有数字(不是 3E5 之类的)不大于您认为可以的数字?

    有一些框架可以帮助您解决所有这些问题。
    例如:

    (您重复使用现有优秀代码的次数越多,对您的应用程序就越好,我想说的是:使用未经测试的新代码引入错误的风险较小;-))


    一旦你确定你的数据是OK的,你就可以将它插入到数据库中。
    这意味着你必须正确地逃避它。
    根据你使用的函数/类,你会看看


    最后,如果数据未成功验证,您可能需要重新回显表单,其中字段已包含用户第一次输入的内容。

    在那里,您需要将数据转义为 HTML 格式,以避免 XSS。看看htmlspecialchars

    同样的事情,顺便说一句,如果您想在应用程序的其他位置的另一个屏幕上显示这些数据...

    【讨论】:

      【解决方案2】:

      检查用户输入数据是否仅包含数字的唯一安全方法是 (1) 使用正则表达式或 (2) 使用 ctype-extension(首选)。

      if (ctype_digit($_POST['pagecount'])) {
          // ...
      }
      

      如果您将整数值插入数据库,则不必转义它们,但要确保它们确实是整数(强制转换它们);对于字符串,您应该使用mysql_real_escape_string,但使用准备好的语句永远不会出错(但通常更好)。

      顺便说一下:检查提交按钮是不安全的,因为 IE

      【讨论】:

        【解决方案3】:

        PDO 及其准备好的语句会让您头疼,即使它们一开始看起来更复杂。对于整数,您可以使用 intval($input),但请记住,PHP 将——以其无限的智慧——将非数字输入变为 0。

        【讨论】:

          猜你喜欢
          • 2010-09-28
          • 2017-09-13
          • 2012-05-19
          • 2012-12-27
          • 2017-02-02
          • 1970-01-01
          • 1970-01-01
          • 2020-01-02
          • 1970-01-01
          相关资源
          最近更新 更多