0

我正在尝试创建一个评论系统。我正在使用php-OEmbed类和HTML Purifier。我可以使用什么过滤器来确保评论可以安全地插入到我的数据库中?我知道您可以使用 PHP 过滤器,例如 FILTER_SANITIZE_STRING,但这些不会将 HTML 转换为实体吗?

此外,如果您使用WMD editor之类的东西,那么您是否还必须在客户端使用某些东西(例如PHP Markdown)以确保它是安全的?

4

2 回答 2

2

基本上,每当您将用户输入发送到某个地方时,您都需要对其进行清理。

当您将其放入数据库时​​,您需要通过引用 SQL 特殊字符来防止 SQL 注入(准备好的语句将为您执行此操作)。当您将其发送到浏览器时,您需要转义 HTML 特殊字符(PHP 具有执行此操作的函数)以防止脚本注入。

可能还有其他地方您也需要转义特殊字符。例如,如果您将评论发送到服务器上的 Bash 脚本以进行某种处理。在这种情况下,您需要引用或转义 Bash 特定的特殊字符。

重要的是不要在错误的阶段引用/转义:例如,当您将 HTML 实体放入数据库时​​不要转义它,除非您完全确定自己在做什么。当您将其从数据库中拉出并准备将其发送到浏览器时,很容易再次意外转义,或者如果您在数据库连接失败时发送错误消息,则根本不转义(这可能导致 XSS 漏洞)。在最后一刻逃跑,你很可能会避免这些陷阱。

于 2010-12-05T02:53:33.530 回答
1

您不需要为 SQL 注入使用任何过滤器。一个更好的解决方案是使用准备好的语句。例如,PDO 提供PDOStatement

于 2010-12-05T02:23:49.313 回答