我们有一个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中工作。
预先感谢, 杰米
答案 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);
}
}