Sitefinity 11将沙箱属性动态添加到iframe。

时间:2018-09-13 15:01:38

标签: iframe sitefinity

我们有一个Sitefinity 11.0.6701.0网站,其中有一个页面,其中包含带有iframe的内容块。我们在iframe中显示的页面是动态的,并且具有表单-在我们托管src页面时,我们也不必担心clickjacking或类似问题。

我们最近将网站从版本8升级了,现在iframe的内容(我们也托管在单独的网站上)不允许动态内容使用。

我注意到Sitefinity在运行时似乎向iframe添加了一个sandbox =“ allow-scripts allow-same-origin”属性。我试图将其更改为sandbox =“ allow-forms”,并且只是完全删除了sandbox属性,但Sitefinity在运行时动态地将第一个属性添加回去。它将“ allow-forms”替换为“ allow-scripts allow-same-origin”属性。

有人知道它在Sitefinity中受到控制吗,我们如何克服这个问题?我们需要此页面是动态的。出于合同原因,我无法在Sitefinity环境中更改实际代码,只能在CMS中工作。

预先感谢, 杰米

1 个答案:

答案 0 :(得分:0)

这是由Html Sanitizer引起的。

一个选项是在 管理>设置>高级>安全>禁用HTML清理 并重新启动网站。

另一个选择是尝试修改消毒器配置,如下所示: https://docs.sitefinity.com/html-sanitization#modify-the-html-sanitizer-configuration

但是查看v.11的反编译代码可能并不容易:

    private class GanssHtmlSanitizer : HtmlSanitizer
    {
        private const string IframeNodeName = "iframe";

        public GanssHtmlSanitizer() : base(null, null, null, null, null)
        {
            base.AllowedTags.Add("iframe");
            base.PostProcessNode += new EventHandler<PostProcessNodeEventArgs>(this.GanssHtmlSanitizer_PostProcessNode);
        }

        private void GanssHtmlSanitizer_PostProcessNode(object sender, PostProcessNodeEventArgs e)
        {
            if (string.Compare(e.Node.NodeName, "iframe", true) == 0)
            {
                (e.Node as IElement).SetAttribute("sandbox", "allow-scripts allow-same-origin");
                string attribute = (e.Node as IElement).GetAttribute("src");
                (e.Node as IElement).SetAttribute("src", this.SanitizeUrl(attribute));
            }
        }

        /// <inheritdoc />
        public string SanitizeUrl(string url)
        {
            return base.SanitizeUrl(url, null);
        }
    }