Sitefinity 11 动态地将沙箱属性添加到 iframe。
Sitefinity 11 adding sandbox attributes to iframe dynamically.
我们有一个 Sitefinity 11.0.6701.0 站点,其中有一个页面包含一个带有 iframe 的内容块。我们在 iframe 中显示的页面是动态的,其中有一个表单 - 我们不关心点击劫持或类似的东西,因为我们也托管 src 页面。
我们最近从版本 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 中工作。
提前致谢,
杰米
这是由 Html 消毒剂引起的。
一个选项是在以下情况下禁用它
管理 > 设置 > 高级 > 安全 > 禁用 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);
}
}
我们有一个 Sitefinity 11.0.6701.0 站点,其中有一个页面包含一个带有 iframe 的内容块。我们在 iframe 中显示的页面是动态的,其中有一个表单 - 我们不关心点击劫持或类似的东西,因为我们也托管 src 页面。
我们最近从版本 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 中工作。
提前致谢, 杰米
这是由 Html 消毒剂引起的。
一个选项是在以下情况下禁用它 管理 > 设置 > 高级 > 安全 > 禁用 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);
}
}