php/mysqli验证表单输入以插入到显示。每个步骤的安全性?

php/mysqli验证表单输入以插入到显示。每个步骤的安全性?,php,forms,validation,mysqli,Php,Forms,Validation,Mysqli,很抱歉,如果其他地方已经回答了这个问题,但是我找不到一个完整的答案来解释这个过程的每一步。这些都是很难拼凑起来的零零碎碎的东西 我想知道在以下整个过程中,何时以及使用何种安全措施: 表单验证 为数据库插入准备数据 显示数据库中的数据 表单验证:我应该为此使用原始表单输入,还是在尝试验证之前需要转义任何内容 示例:我在这里需要“mysqli\u real\u escape\u字符串”还是只属于下面的步骤2 if (empty($_POST["email"])) { $emailERR = "*

很抱歉,如果其他地方已经回答了这个问题,但是我找不到一个完整的答案来解释这个过程的每一步。这些都是很难拼凑起来的零零碎碎的东西

我想知道在以下整个过程中,何时以及使用何种安全措施:

  • 表单验证
  • 为数据库插入准备数据
  • 显示数据库中的数据

  • 表单验证:我应该为此使用原始表单输入,还是在尝试验证之前需要转义任何内容
  • 示例:我在这里需要“mysqli\u real\u escape\u字符串”还是只属于下面的步骤2

    if (empty($_POST["email"])) {
    $emailERR = "* Required";
    } else { 
        $email = mysqli_real_escape_string($_POST["email"]);
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailERR = "* Invalid email"; 
            }
        }
    
  • 一旦使用FILTER\u VALIDATE\u电子邮件验证了输入,使用准备好的语句“按原样”将其发送到数据库是否安全,或者是否需要进一步验证或更新

  • 当我想显示数据库中的数据时,我是否可以只使用“htmlspecialchars($fieldData)”而不使用其他任何东西来安全地显示在用户的浏览器中?例如,如果我在插入mysqli_real_escape_字符串之前使用了它,那么当我从数据库中获取它时,是否还需要执行其他操作来重新格式化它以供显示

  • 根据我目前所了解的情况,我希望答案是:

  • 使用原始输入进行验证

  • 插入记录时,将mysqli_real_escape_字符串与准备好的语句一起使用

  • 使用htmlspecialchars显示数据库中的数据

  • …但我是新手,所以如果我遗漏了什么,请告诉我

    当然我关心的是防御这里的攻击。。。任何帮助都将不胜感激。感谢

    1)表单验证:在获取任何$\u POST['…']值时,应立即使用htmlspecialvars():

    $email = htmlspecialvars($_POST['email']);
    
    2) 准备插入数据:我建议使用PDO(而不是mysqli)。大多数程序员都会同意,这是使用MySQL的更好方法,因为它更面向对象,并且您不希望以后不得不更改所有代码。您已经在步骤中过滤了一次数据,因此无需再次进行过滤

    3) 由于您的数据在插入数据库之前已经过筛选,因此在检索此数据以显示给其他用户时,无需对其进行筛选

    希望有帮助!如果有,请告诉我