![](/img/trans.png)
[英]should i use php's htmentities() with pdo to filter input and output escapeing?
[英]Should i sanitize/filter user input and output when using PHP PDO?
我正在使用PDO进行用户输入,但是现在我在显示MySQL数据库中的内容时仍然没有使用PDO(仍然是使用SQL命令的旧式方式..)。
在将数据插入MySQL数据库时,是否有必要过滤/清理用户的输入?
并且,如果要采取的方法是对输出进行消毒,那么消毒输出的最佳方法是什么? 我很高兴,如果我只是使用htmlspecialchars()
或者我还需要使用strip_tags()
和其他东西吗?
我正在使用占位符和准备好的声明。
谢谢。
你在这里混淆了不同的消毒:
要对要插入数据库的数据进行SQL清理。 使用params准备好查询,无需转义,PDO在内部执行。 如果您不使用准备好的查询,请使用它们。 它是防弹的(据我所知)。
您从数据库获取并以HTML格式输出的数据:在此之前,您必须先将其打印到用户之前(以防止XSS),可以使用htmlspecialchars()
, htmlentites()
或strip_tags()
,具体取决于您要逃避的内容或删除。
如果你正确使用参数化查询,那么不,你不必逃避。 这实际上是将转义数据插入到数据库中,因此当您选择数据时,您将获得稍后返回的转义。
然而,就切换到PDO 不会使你的代码更加安全,例如,如果你这样做
$sth = $db->prepare("INSERT INTO sometable (x) VALUES ($_GET[x])");
因为你没有使用占位符,所以仍然完全容易受到注射攻击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.