我知道应该在输出或显示数据时进行清理,而不是在接收或存储数据时进行清理。这就是我现在正在做的:
echo htmlspecialchars($name, ENT_QUOTES);
如果要获取$ _GET参数并检查数据库中的参数,我是否仍要进行清理和转义?例如:
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
所以需要htmlspecialchars
还是应该只做$name = $_GET['name']
?
PDO使它比您做起来更加容易:
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute([ 'name' => $_GET['name'] ]);
就是这样。完成。
重要的是,在使用占位符值时,尤其是在进行匹配时,请不要转义。 htmlspecialchars
在HTML上下文中与[[only是相关的,否则会造成损坏。如果要以JSON,电子邮件或其他方式显示数据,请对该上下文和该上下文only进行转义。[如果某人的名字像“ A&W”,那么当您搜索时,您将弄乱输入内容并实际搜索“ A& W”,这不是他们的名字。他们将得到零匹配,然后他们会问您您的网站出了什么问题。
您应该对输入数据进行的[[only
操作是删去可能干扰搜索匹配的所有字符,例如可能有人引入了[[偶然]]的前导和尾随空格。请勿使用htmlspecialchars()
。 bind()
完成所需的所有转义和引用。