使用PHP PDO时,我应该清理/过滤用户输入和输出吗?

时间:2012-04-12 18:25:07

标签: php mysql pdo sanitization htmlspecialchars

我正在使用PDO进行用户输入,但是现在我在显示MySQL数据库中的内容时仍然没有使用PDO(仍然是使用SQL命令的旧式方法..)。

在将数据插入MySQL数据库时是否有必要过滤/清理用户的输入?

并且,如果要采用的方法是清理输出,那么清理输出的最佳方法是什么?如果我只使用htmlspecialchars()或者我还需要使用strip_tags()和其他东西吗?我很乐意去吗?

我正在使用占位符和准备好的陈述。

谢谢。

2 个答案:

答案 0 :(得分:6)

你在这里混淆了不同的消毒:

  • 要对数据插入数据库的SQL清空。使用params准备好查询,无需转义,PDO在内部执行。如果您不使用准备好的查询,请使用它们。它是防弹的(据我所知)。

  • 您从数据库获取并以HTML格式输出的数据:在此之前,您必须先将其打印,然后再将其打印给用户(以防止XSS),方法是使用htmlspecialchars()htmlentites()strip_tags(),取决于您想要转义或删除的内容。

答案 1 :(得分:5)

如果你正确使用参数化查询,那么不,你不必逃避。这实际上是将转义数据插入到数据库中,因此当您选择数据时,您将获得转义。

然而,只需切换到PDO NOT 就可以使您的代码更安全,例如如果你这样做

$sth = $db->prepare("INSERT INTO sometable (x) VALUES ($_GET[x])");

仍然完全容易受到注射攻击,因为您没有使用占位符。