Sitefinity 11 динамически добавляет атрибуты песочницы в iframe. - PullRequest
0 голосов
/ 13 сентября 2018

У нас есть сайт Sitefinity 11.0.6701.0, на котором у меня есть страница, которая содержит блок контента с iframe.Страница, которую мы отображаем в iframe, является динамической и имеет форму - мы не занимаемся кликбэком или чем-то подобным, поскольку мы также размещаем страницу src.

Недавно мы обновили наш сайт с версии 8, и теперь контент iframe (который мы также размещаем на отдельном сайте) не позволяет работать динамическому контенту.

Я заметил, что Sitefinity, похоже, добавляет в iframe атрибут sandbox = "allow-scripts allow-same-origin".Я попытался изменить это на sandbox = "allow-forms", а также просто полностью удалить атрибут sandbox, но Sitefinity динамически добавляет первый атрибут обратно во время выполнения.Он заменяет «allow-формы» на атрибут «allow-scripts allow-same-origin».

Кто-нибудь знает, где это контролируется в Sitefinity и как мы можем решить эту проблему?Нам нужна эта страница, чтобы быть динамичной.По договорным причинам я не могу изменить реальный код в нашей среде Sitefinity, работаю только в CMS.

Заранее спасибо, Джейми

1 Ответ

0 голосов
/ 14 сентября 2018

Это вызвано 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);
        }
    }
...