我正在使用 PDO 来进行用户输入,但现在在显示我的 MySQL 数据库中的内容时我没有使用 PDO(仍然是 SQL 命令的老式方式......)。
将数据插入 MySQL 数据库时是否需要过滤/清理用户的输入?
并且,如果要走的路是清理输出,那么清理输出的最佳方法是什么?如果我只是使用htmlspecialchars()
还是我还需要使用strip_tags()
其他东西,我可以走了吗?
我正在使用占位符和准备好的语句。
谢谢你。
我正在使用 PDO 来进行用户输入,但现在在显示我的 MySQL 数据库中的内容时我没有使用 PDO(仍然是 SQL 命令的老式方式......)。
将数据插入 MySQL 数据库时是否需要过滤/清理用户的输入?
并且,如果要走的路是清理输出,那么清理输出的最佳方法是什么?如果我只是使用htmlspecialchars()
还是我还需要使用strip_tags()
其他东西,我可以走了吗?
我正在使用占位符和准备好的语句。
谢谢你。
你在这里混淆了不同的消毒:
SQL sanatizing 数据插入到您的数据库。使用带有参数的准备好的查询,无需转义,PDO 在内部进行。如果您不使用准备好的查询,请使用它们。它是防弹的(据我所知)。
您从数据库中获取的数据并以 HTML 格式输出:在这里,您必须在将其打印给用户之前进行清理(以防止 XSS),可以使用或htmlspecialchars()
, 具体取决于您要转义或删除的内容。htmlentites()
strip_tags()
如果您正确使用参数化查询,那么不,您不必逃避。这实际上会将转义数据插入到数据库中,因此当您选择数据时,您会在稍后返回转义数据。
但是,仅仅切换到 PDO 并不能使您的代码更安全,例如,如果您这样做
$sth = $db->prepare("INSERT INTO sometable (x) VALUES ($_GET[x])");
仍然完全容易受到注入攻击,因为您没有使用占位符。