如果其他地方已经回答了这个问题,我很抱歉,但我找不到一个好的、全面的答案来解释这个过程的每一步。这一切都是零碎的,很难拼凑在一起。
我想知道在的整个过程中什么时候使用什么安全措施
- 表单验证
- 准备要插入数据库的数据
-
显示数据库中的数据
- 表单验证:我应该使用原始表单输入吗?还是在尝试验证之前需要转义任何内容
示例:这里需要"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";
}
}
一旦使用FILTER_VALIDATE_EMAIL验证了输入,使用准备好的语句将其"原样"发送到数据库是否安全,或者是否需要进一步验证或清理?
当我想显示数据库中的数据时,我可以只使用"htmlspecialchar($fieldData)"而不使用其他任何东西来在用户的浏览器中安全显示吗?例如,如果我在插入它之前使用了mysqli_real_escape_string,那么当我从数据库中获取它时,是否还需要做其他事情来重新格式化它以供显示?
根据我目前所学到的,我希望答案是:
使用原始输入进行验证
插入记录时,将mysqli_real_escape_string与准备好的语句一起使用
使用htmlspecialchars显示数据库中的数据
但我是新手,所以如果我错过了什么,请告诉我。。。
当然,我关心的是防御这里的攻击。。。如有任何帮助,我们将不胜感激。感谢
1)表单验证:当获取任何$_POST['…']值时,应该立即使用htmlspecialvars():
$email = htmlspecialvars($_POST['email']);
2) 准备插入数据:我建议使用PDO(而不是mysqli)。大多数程序员都认为这是推进MySQL的更好方法,因为它更面向对象,而且你不想在以后更改所有代码。您已经在步骤中过滤了一次数据,因此无需再次进行。
3) 由于在将数据插入数据库之前就已经对其进行了筛选,因此在检索此数据以显示给其他用户时无需对其进行筛选。
希望能有所帮助!让我知道它是否进行了