【问题标题】:What methods to use for PHP Field ValidationPHP字段验证使用什么方法
【发布时间】:2016-03-17 14:59:30
【问题描述】:

什么是最佳实践其他方法;

之外
!empty();
isset();
!is_null();

并为变量赋值,例如

$variable = $_POST['value']` 

我是否使用来确保表单数据经过验证足够干净以供使用?

我是否会竭尽全力尝试使用字段长度和正则表达式验证?

如果端点是使用 MySQL 和 PHP 的 API,使用 htmlspecialchars() 是否会导致使用这些方法丢失数据的潜在问题?

【问题讨论】:

  • 这取决于您需要验证什么...例如检查电子邮件是否有效不要使用!empty();
  • 你混合了一些东西,验证/卫生,SQL注入/XSS等等。总的来说,这个问题对于恕我直言来说太宽泛了,每个主题都有大量资源。
  • htmlspecialchars 不应该在保存数据时使用,只在输出时使用,所以你不应该有任何数据丢失。
  • 但是我会用它来确保 $_POST['email'] 实际上有一些东西,然后使用正则表达式或其他东西检查它是一封电子邮件,还是直接跳到正则表达式?

标签: php mysql regex validation post


【解决方案1】:

您可以使用 filter_input 方法并使用像 FILTER_SANITIZE_SPECIAL_CHARS 这样的过滤器。它是过滤帖子参数的更好方法。 function.filter-input.php

【讨论】:

    【解决方案2】:

    对于输入验证,我建议您参考 Open Web Application Security Project (OWASP)。在data validationPHP filterscheat sheetsXSS protection 上有页面。

    由于您特别提到了 MySQL,我会注意到最佳安全实践是使用 PDO 或 MySQLi 来参数化您的语句。参数化语句在防止 MySQL 注入方面比依赖净化输入更有效,因为 PHP 不依赖语法来区分用户输入和 SQL 查询本身。但是,当从数据库访问数据时,htmlspecialchars() 仍然可以派上用场,以防止 XSS 攻击。

    【讨论】:

      【解决方案3】:

      很好的答案,谢谢!

      对于 MySQL 而言,参数化语句肯定是唯一使用的方法。

      我想对我来说最重要的是通过 post 方法提交值。

      如果我期待 JSON 并且只有 JSON,那么这样的东西应该可以在服务器端工作。

      function isJSON(MyTestStr){
          try {
              var MyJSON = JSON.stringify(MyTestStr);
              var json = JSON.parse(MyJSON);
              if(typeof(MyTestStr) == 'string')
                  if(MyTestStr.length == 0)
                      return false;
          }
         catch(e){
              return false;
          }
          return true;
      }
      

      然后我应该能够通过直接从 JSON 中提取值并在 PHP 脚本中使用它们来做进一步的事情,而不必担心。

      【讨论】:

        【解决方案4】:

        输入数据的每次使用都需要不同的过滤/保护。

        首先,我喜欢这样做

        $foo = @$_POST['foo'];
        if (empty(foo)) ... // take different action if foo is totally missing (not just blank)
        

        要插入 MySQL,请使用 API 中可用的转义机制——real_escape_string,或“绑定”。不要使用mysql_* API,它已被mysqli_* 取代。不要将多个查询合并到一个调用中。

        要在 HTML 页面上显示,请使用 htmlentities。注意:在插入数据库表之前不要使用它;这只会使桌子变得混乱。相反,在展示之前要有纪律地使用它。

        如果您有旧版本的 PHP,您可能会想使用 Magic Quotes。不!正如评论所说,“[这种] 千篇一律的转义/引用方法是错误的,而且非常危险。”

        对于 JSON,我喜欢 json_encode(...)json_decode(..., TRUE)

        【讨论】:

          猜你喜欢
          • 2012-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-06
          • 1970-01-01
          • 2015-02-11
          • 2021-10-03
          相关资源
          最近更新 更多