【问题标题】:Avoid XSS with BBCode input and HTML output使用 BBCode 输入和 HTML 输出避免 XSS
【发布时间】:2013-06-15 19:28:49
【问题描述】:

我目前正在开发一个网站,用户可以在该网站上撰写具有多种格式可能性(如粗体、斜体、列表...)的文章。我正在使用一个框架:CodeIgniter。

我是一个初学者,我听说过一些关于 XSS 的东西。我想知道您对我的实施有何看法。我读了这个话题: What's the best method for sanitizing user input with PHP?

1) 用户写他的文章,用BBCode 格式化。我正在使用 SCEditor。

2) 将其保存到数据库时,我使用 htmlspecialchars() 过滤任何可疑的 HTML 标记。当我保存数据或显示数据时,我应该这样做吗?

3)当我想在网站上显示文章时(例如用于其他用途),我将BBCode标签转换为HTML标签。

这是正确的方法吗?我在避免 XSS 吗?

我显然愿意接受建议和建议。

感谢您的回答

【问题讨论】:

    标签: html codeigniter xss bbcode htmlspecialchars


    【解决方案1】:

    用于验证的 Codeigniter 有一个属性 xss 可以完成所有这些工作

    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');
    

    查看表单验证 Codeigniter:

    http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html

    【讨论】:

    【解决方案2】:

    我使用 PHP“查找和替换”,但我认为这不是最有效的方法。

    <?php
        $malicious = "<script>alert(1)</script>";
        $malicious = str_ireplace("<", "", $malicious);
        $malicious = str_ireplace(">", "", $malicious);
        echo $malicious;
    ?>
    

    【讨论】:

    • 我知道这个问题很老,但它得到了很多观点,所以我想评论这个答案。这实际上是一种不好的方法,例如,您仍然可以将 XSS 放在 onload-attribute 或类似的东西中。
    • 除了@1n9i9c7om,我想指出,使用这种方法,用户无法插入&amp;lt;&amp;gt; 符号,这可能会很烦人。您可以将其替换为相应的 HTML 实体,而不是删除该字符:&amp;lt;&amp;gt;
    【解决方案3】:
    <?php
    $malicious = "<script>alert(1)</script>";
    $malicious = strip_tags($malicious);
    $malicious = htmlentities($malicious, ENT_QUOTES);
    echo $malicious;
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2010-12-07
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多