【问题标题】:Codeigniter removes inline style from html inputCodeigniter 从 html 输入中删除内联样式
【发布时间】:2012-10-11 08:21:11
【问题描述】:

看看下面的代码:

$this->input->post('title', FALSE);

我已手动禁用 XSS 过滤。

现在让我们看一些例子:

<p BAD_ATTR_KEY="BAD_ATTR_VAL">Salam</span>

返回:

<p BAD_ATTR_KEY="BAD_ATTR_VAL">Salam</span>

<p style="color: red;">Salam</span>

返回:

<p  red;">Salam</span>

任何想法如何禁用此行为,以便站点管理员能够轻松地将不同的内联样式分配给页面上的任何元素?


更新:

我在application/config/config.php 中启用了全局 XSS 过滤,因为我一直需要它。

只有当受信任的管理员从后端发布他们的内容时,我才需要 XSS 过滤。为此,我手动禁用了上面代码中提到的 XSS 过滤。而且我认为手动配置应该覆盖config.php 的默认配置,所以应该没有问题。

【问题讨论】:

  • 在我看来,XSS 过滤仍在进行中。你在 config.php 中禁用了吗?
  • @Asad 据我所知,在 config.php 中启用和禁用它只会更改默认行为。但是现在,我手动禁用了它,因为除了现在之外我一直都需要它。
  • @Asad 你是对的。请发表您的评论作为答案,以便我能够接受它。但是为什么不应该手动覆盖呢?那么$this-&gt;input-&gt;post()中的第二个参数有什么作用呢?

标签: php codeigniter xss user-input validation


【解决方案1】:

根据Asad的评论,我发现了我的问题所在。

即使现在我已经手动禁用了 XSS 过滤,使用:

$body = $this->input('body', FALSE);

,因为我在 application/config/config.php 中启用了 XSS 过滤,所以它仍然被删除。

我真的不知道为什么无论如何不能使用第二个参数覆盖它。

【讨论】:

  • 我也设置为 TRUE,现在我将其设置为 FALSE,但样式属性仍然被剥离...:S 有什么线索吗?
  • 您确定将第二个参数设置为FALSE
  • 我发现了问题...我正在使用表单验证,并且该特定字段正在使用 xss_clean 函数进行准备(更多关于使用表单验证准备数据:codeigniter.com/user_guide/libraries/…
【解决方案2】:

我花了大约 5 个小时来解决这个问题并找到了简单的解决方案。 首先,您需要找到安全类,它位于您的项目/应用程序/核心中,如果使用了任何 codeigniter cms,则在项目/系统/codeigniter/core/security 中

会有一个名为“_remove_evil_attributes”的函数(受保护的方法) 在这个函数中会有一行 $evil_attributes = array('on\w*', 'style', 'xmlns', 'formaction'); 如果要在输入元素或文本区域中允许样式属性,则需要从此处删除“样式”以允许样式属性正常工作,否则它们将自动替换为下面此函数中编写的这行代码

$str = preg_replace('/-])(.?)('.implode('|' , $attribs).')(.?)([\s>

所以要小心这件事,不要像我一样浪费你宝贵的时间。 海信 谢谢

【讨论】:

  • 很好,谢谢它也有效,它解释了很多但是如何在不修改核心文件的情况下做到这一点?我们不能重写函数或类似的东西吗?
【解决方案3】:

看的不是解决方案,而是解决方法

出于安全原因,我无法禁用全局 XSS 过滤。

所以,我做到了。

<h1 stile="color:red;">Red</h1>

注意style写成stile

即使使用$this-&gt;input-&gt;post('body', TRUE); 也可以接受

现在,我在前端使用了str_replace("stile", "style", $body);

也许不是最好的解决方案,但可以解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 2012-07-13
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多