Одинарные кавычки отклонены очистителем HTML

Это связано с HTMLPurifier - добавление в список игнорирования. Я добавил пару тегов в белый список. У меня есть этот код сейчас -

$config->set('HTML', 'AllowedElements', array("customreport", "column", "columnseq"));

$def = $config->getHTMLDefinition(true);
$def->addElement("customreport", 'Block', 'Flow', 'Common', array());
$def->addElement("column", 'Block', 'Inline', 'Common', array());
$def->addElement("columnseq", 'Inline', 'Empty', 'Common', array('path'=>'CDATA', 'label'=>'CDATA'));

Проблема в том, что если я отправляю html-тег, значение атрибута которого заключено в одинарные кавычки, htmlpurifier меняет его на двойные кавычки. Например,

<columnseq path='test' label='tlabel' />

Это происходит даже на демонстрационном сайте (http://htmlpurifier.org/demo.php), с тестовая строка

<A HREF='http://www.google.com/'>XSS</A>

Можно ли переопределить это поведение?


person pinaki    schedule 26.07.2010    source источник
comment
Почему? Выход точно эквивалентен входу, так в чем проблема?   -  person Quentin    schedule 26.07.2010
comment
Нет никакой разницы между заключением значений атрибутов в одинарные или двойные кавычки.   -  person Gumbo    schedule 26.07.2010
comment
да, может быть важно для встроенного javascript и т. д.   -  person Nealv    schedule 26.07.2010
comment
@Nealv: нет, если одиночные и двойные кавычки представлены ссылками на символы.   -  person Gumbo    schedule 26.07.2010
comment
Я собирался поныть о стандартах, но это выглядит как как одинарные, так и двойные кавычки допустимы для атрибутов в HTML5. Хм, я ждал этой тирады.   -  person Charles    schedule 26.07.2010
comment
я уже просмотрел стандарты ... проблема здесь в том, что строка изменена, и если я регистрирую любое такое поведение (на основе разницы между входной и выходной строкой), то это регистрируется, что является ложным срабатыванием, которое я хотел бы избегать. Кроме того, зачем что-то менять, если это правильно?   -  person pinaki    schedule 26.07.2010
comment
@ Дэвид Дорвард - спасибо за комментарий. но зачем вообще переходить с одинарных кавычек на двойные?   -  person pinaki    schedule 26.07.2010
comment
@pinaki — я предполагаю, что инструмент анализирует HTML в структуру данных, а затем сериализует его, а не пытается отредактировать с помощью набора строковых операций.   -  person Quentin    schedule 26.07.2010
comment
@ Дэвид - да, я предполагал то же самое ... проблема, которая у меня есть (хотя и не очень большая проблема), заключается в том, что ввод и вывод не совпадают (кавычки разные) ... я не уверен, но я надеюсь, что есть какой-то способ переопределить это поведение или даже какое-то расширение настройки, которое я могу сделать, чтобы получить то, что мне нужно :)... просто надеюсь..   -  person pinaki    schedule 26.07.2010


Ответы (1)


Канонизация заключения атрибутов в двойные кавычки была преднамеренным проектным решением, вытекающим из того факта, что когда мы создаем наше представление HTML в памяти, у нас есть только ассоциативный массив имен атрибутов со значениями и нет информации о том, что исходное стиль цитирования был. Если вы используете синтаксический анализатор в стиле DOM, эту информацию также невозможно получить.

person Edward Z. Yang    schedule 26.07.2010
comment
хммм... дизайнерское решение имеет смысл для меня, хотя оно создало своеобразную проблему с моей стороны. Во всяком случае, только проблема с ложными срабатываниями, так что я думаю, что все в порядке. Спасибо за ответ.. - person pinaki; 26.07.2010
comment
Хотя HTML Purifier пытается максимально сохранить синтаксис, на самом деле он не выходит за рамки этого. И вы, вероятно, получите много ложных срабатываний от пользователей, отправляющих неправильный HTML. Лучше искать строки, традиционно связанные с XSS. - person Edward Z. Yang; 27.07.2010
comment
Командир - что именно вы подразумеваете под строками, традиционно связанными с XSS?? можете привести пример? - person pinaki; 27.07.2010
comment
Кроме того, можно ли получить информацию об очистке от htmlpurifier? я имею в виду, может ли htmlpurifier вернуть мне информацию, когда ввод содержит какие-либо xss? - person pinaki; 27.07.2010
comment
Строки, связанные с XSS, — это в основном строки любого типа, которые могут быть связаны с JavaScript, например javascript или ‹script› или onSomeEvent. Вы можете найти их большой каталог в системе обнаружения веб-вторжений (попробуйте, может быть, phpids?). Вы можете получить информацию об очистке с помощью экспериментальной опции Core.CollectErrors (дополнительную информацию см. в документации), но это не обязательно равно XSS. пытаться. - person Edward Z. Yang; 27.07.2010