【问题标题】:Safety of user-supplied LESS用户提供的 LESS 的安全性
【发布时间】:2015-11-02 22:50:29
【问题描述】:

作为我的论坛系统的一部分,用户可以在他们的帖子中包含 LESS。帖子内容包含在 uniqid-referenced ID 中,LESS 包含在 #IDhere {... } 中。这使用户可以充分灵活地发布帖子。

据我所知,没有办法打破这个块,并确保在使用包装器编译之前对 LESS 进行语法检查没有包装。这可以防止仅关闭包装器并定义最终不会包装的样式的技巧(并且只需将最终的} 留给包装器添加)

我想不出这里有什么问题,但我想换个角度看这个!我是否错过了任何让用户在指定容器内设置样式的内容?

【问题讨论】:

    标签: css less


    【解决方案1】:

    我是否错过了任何让用户在指定容器内设置样式的内容?

    是的。 & 的任何用法都将允许用户将包装元素的选择器放置在他们想要的任何位置,这允许按照以下方式使用:

    p:not(&) {
        ...
    }
    

    当嵌套在类似的东西中时:

    #uniqid {
        p:not(&) {
            ...
        }
    }
    

    产生:

    p:not(#uniqid) {
        ...
    }
    

    这会影响 每个 p 元素,假设您强制使用唯一 ID。

    【讨论】:

    • 哦,不错。好的,这里有一个一般规则可以限制我修补这个问题吗?如果我能提供帮助,我有点不想完全限制&,但如果没有简单的规则来防止这个问题,那么我想这会修补它......
    • @NiettheDarkAbsol,使用& 只是我想到的第一种会破坏选择器命名空间的方法。我相信可能还有其他方法可以劫持选择器,但我并没有花很多时间进入那个兔子洞。我认为可以使用字符串插值来生成选择器,这将允许用户在他们想要的全局选择器前加上 , 前缀,以便转义命名空间 ID。
    • @NiettheDarkAbsol,我刚刚确认选择器插值可用于转义命名空间 ID codepen.io/zzzzBov/pen/ojMxmM。另请注意,CSS 已被用作攻击媒介(例如mksben.l0.cm/2015/10/…),并且对于旧版浏览器,CSS 曾经能够触发 JavaScript,因此请考虑限制用户可以执行的操作,并确保将他们可以控制的任何内容彻底沙箱化。
    • 好的,谢谢你的信息。看起来这个功能需要做更多的工作。
    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 2017-11-22
    • 2013-03-21
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多