php/mysqli验证表单输入到插入到显示.每一步的安全性


php/mysqli Validating Form Input to Inserting to Displaying. Security at each step?

如果其他地方已经回答了这个问题,我很抱歉,但我找不到一个好的、全面的答案来解释这个过程的每一步。这一切都是零碎的,很难拼凑在一起。

我想知道在的整个过程中什么时候使用什么安全措施

  1. 表单验证
  2. 准备要插入数据库的数据
  3. 显示数据库中的数据

    1. 表单验证:我应该使用原始表单输入吗?还是在尝试验证之前需要转义任何内容

示例:这里需要"mysqli_real_escape_string"吗?还是它只属于下面的第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"; 
        }
    }
  1. 一旦使用FILTER_VALIDATE_EMAIL验证了输入,使用准备好的语句将其"原样"发送到数据库是否安全,或者是否需要进一步验证或清理?

  2. 当我想显示数据库中的数据时,我可以只使用"htmlspecialchar($fieldData)"而不使用其他任何东西来在用户的浏览器中安全显示吗?例如,如果我在插入它之前使用了mysqli_real_escape_string,那么当我从数据库中获取它时,是否还需要做其他事情来重新格式化它以供显示?

根据我目前所学到的,我希望答案是:

  1. 使用原始输入进行验证

  2. 插入记录时,将mysqli_real_escape_string与准备好的语句一起使用

  3. 使用htmlspecialchars显示数据库中的数据

但我是新手,所以如果我错过了什么,请告诉我。。。

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

1)表单验证:当获取任何$_POST['…']值时,应该立即使用htmlspecialvars():

$email = htmlspecialvars($_POST['email']);

2) 准备插入数据:我建议使用PDO(而不是mysqli)。大多数程序员都认为这是推进MySQL的更好方法,因为它更面向对象,而且你不想在以后更改所有代码。您已经在步骤中过滤了一次数据,因此无需再次进行。

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

希望能有所帮助!让我知道它是否进行了