【问题标题】:Ensuring comment safety确保评论安全
【发布时间】:2023-03-28 08:56:02
【问题描述】:

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

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

【问题讨论】:

    标签: php security markdown wmd


    【解决方案1】:

    基本上,您需要在将用户输入发送到某处时对其进行清理。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我忘了补充,我用的是redbean,它是建立在PDO之上的。
      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多