转义并清除$ _GET参数

问题描述 投票:0回答:4

我知道应该在输出或显示数据时进行清理,而不是在接收或存储数据时进行清理。这就是我现在正在做的:

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']

php mysql pdo get htmlspecialchars
4个回答
3
投票

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()完成所需的所有转义和引用。


1
投票

1
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.