Закрытие тега парсера
Я использую Антисами для проверки HTML. Моя политика разрешает использование фреймов, таких как видео на YouTube. Проблема в том, что если тег пуст (как это):
<iframe src="//www.youtube.com/embed/uswzriFIf_k?feature=player_detailpage" allowfullscreen></iframe>
чем после уборки будет так:
<iframe src="//www.youtube.com/embed/uswzriFIf_k?feature=player_detailpage" allowfullscreen/>
Но у него должен быть нормальный закрывающий тег.
И это нарушит весь контент на странице после. Я уже установил свои директивы для использования большей части HTML, но не XML:
<directives>
<directive name="omitXmlDeclaration" value="true"/>
<directive name="omitDoctypeDeclaration" value="true"/>
<directive name="maxInputSize" value="200000"/>
<directive name="nofollowAnchors" value="true" />
<directive name="validateParamAsEmbed" value="true" />
<directive name="useXHTML" value="false"/>
<directive name="embedStyleSheets" value="false"/>
<directive name="connectionTimeout" value="5000"/>
<directive name="maxStyleSheetImports" value="3"/>
<directive name="formatOutput" value="false"/>
</directives>
Но это не поможет.
UPD: переключение между парсерами и игра с директивами до сих пор не дали никаких результатов.
UPD2: это часть моей конфигурации, отвечающая за обработку iframe
тег:
<tag name="iframe" action="validate">
<attribute name="src">
<regexp-list>
<regexp name="youtube"/>
<regexp name="slideshare"/>
</regexp-list>
</attribute>
<attribute name="allowfullscreen">
<regexp-list>
<regexp name="anything"/>
</regexp-list>
</attribute>
<attribute name="scrolling">
<regexp-list>
<regexp name="anything"/>
</regexp-list>
</attribute>
<attribute name="marginwidth">
<regexp-list>
<regexp name="anything"/>
</regexp-list>
</attribute>
<attribute name="marginheight">
<regexp-list>
<regexp name="anything"/>
</regexp-list>
</attribute>
<attribute name="frameborder">
<regexp-list>
<regexp name="anything"/>
</regexp-list>
</attribute>
<attribute name="style"/>
</tag>
Любая идея?
1 ответ
Попробуй это -
<tag name="iframe" action="validate"/>
И добавить тег в этот список -
<allowed-empty-tags>
<literal-list>
<literal value="iframe"/>
</literal-list>
</allowed-empty-tags>
Я столкнулся с той же проблемой. В моем случае это было связано с политикой AntiSamy, имеющей такую директиву:
<directive name="useXHTML" value="true" />
Который, согласно документации OWASP, выведет очищенные данные в формате XHTML, а не просто обычный HTML. Пожалуйста, смотрите: https://www.owasp.org/index.php/AntiSamy_Directives
Если изменить это значение на false, то обработанный вывод будет предоставлен в виде действительного HTML. Элементы уровня блока не будут сокращены и станут недопустимой разметкой.