Вставка таблиц в форуме phpBB 3
Добавлено: 23 дек 2014, 23:07
Меня давно возмущало в движке форума phpBB отсутствие возможности вставлять html-таблицы в сообщения.
Теоретически можно реализовать это при помощи bb-тегов, чему можно найти примеры в интернете, либо попадались даже советы просто разрешить html-код в сообщениях!
Но у всех этих вариантов слишком много минуов. Например, если задействовать пользовательские bb-теги, то всё равно не будет проверки на корректность вложенности тегов, т. е. возможны конструкции вида:
В поисках по англоязычному интернету самое интересное, что я нашел — это мод [BBCode] Tablemaker v.1.0.0.
Он позволяет через яваскриптовое pop-up окно задать параметры и сгенерировать bb-код таблицы. На мой взгляд его интефейс несколько наворочен, при чём в очень худшую сторону: Зачем простомупользователю задвать такие атрибуты, как cellpadding, cellspacing, высоту таблицы?? А такие нужные атрибуты для ячеек как colspan и rowspan, там не предусмотрены. После тестовой установки этого мода у меня даже не возникло желания попробовать его модернизировать вручную, т. к. пришлось бы переделывать всё, даже сама идея яваскриптового окна, которое при щелчке по родительскому окну браузера уйдёт за него раз и навсегда... она ужасна..
Естественно, этот мод не контролирует правильность вложенности тегов, а bb-код получается неформатированным, просто однородная масса, очень не удобно с таким работать.
Я как представил, что предложу пользователям таким макаром таблицы создавать, сам испугался. А неформатирован код потому, что если бы он был отформатирован, то phpBB поставил бы при отображении поста на месте переносов строк теги <br />, например, между рядами таблицы, т. е. получится примерно такая "красота":
Просто разрешать html в сообщениях — это с точки зрения безопасности — без комментариев. Наверное, поэтому в движке phpBB и возможности такой даже не предусмотрено. Те кто такое предлагают имею в виду просто отрубить в коде конвертацию html спецсимволов в их эквиваленты-сущности, как сказал выше — это без комментариев.
Разрешить вставку html в сообщения только, например, для администраторов.. И такой вариант иногда встречается. Но, это тоже опасно т. к. администратора могут спровоцировать на цитирование сообщения, в котором будет примерно такой код:
Тут уже свои нюансы появляются:
Во-первых у HTML Purifier главное достоинство, что он, конечно, вычистит все потенциально опасное из кода, но он пасует перед простыми житейскими проблемами типа лишнего пробела в теге.
HTML Purifier может удалить лишние атрибуты в тегах, лишние символы после имени тега до закрывающей скобки, закрыть незарытый парный тег. Но, например, встретив в таблице такую конструкцию:
Задействовать его имеет смысл, если только мы приняли решение разрешить большое количество html-тегов в сообщении. Валидировать им только таблицы — не самое оптимальное решение, т. к. HTML Purifier требует много ресурсов, а, как писал выше при простых житейских трудностях может спасовать. Т. е. это как из пушки по воробьям палить.
Вообще, HTML Purifier не единственный чистильщик xml/html/css, вот интересный обзор чистильщиков http://htmlpurifier.org/comparison.
В общем, взвесив все эти факторы, я решил, что стоит попробовать реализовать возможность вставки таблиц на форуме в виде html-кода по принципу разрешения тегов и атрибутов из «Белого списка». О чем скоро напишу подробнее..
Теоретически можно реализовать это при помощи bb-тегов, чему можно найти примеры в интернете, либо попадались даже советы просто разрешить html-код в сообщениях!
Но у всех этих вариантов слишком много минуов. Например, если задействовать пользовательские bb-теги, то всё равно не будет проверки на корректность вложенности тегов, т. е. возможны конструкции вида:
- Код: Выделить всё
[td]текст[/td]текст[table]текст[/table]текст[tr]текст[/tr]
В поисках по англоязычному интернету самое интересное, что я нашел — это мод [BBCode] Tablemaker v.1.0.0.
Он позволяет через яваскриптовое pop-up окно задать параметры и сгенерировать bb-код таблицы. На мой взгляд его интефейс несколько наворочен, при чём в очень худшую сторону: Зачем простомупользователю задвать такие атрибуты, как cellpadding, cellspacing, высоту таблицы?? А такие нужные атрибуты для ячеек как colspan и rowspan, там не предусмотрены. После тестовой установки этого мода у меня даже не возникло желания попробовать его модернизировать вручную, т. к. пришлось бы переделывать всё, даже сама идея яваскриптового окна, которое при щелчке по родительскому окну браузера уйдёт за него раз и навсегда... она ужасна..
Естественно, этот мод не контролирует правильность вложенности тегов, а bb-код получается неформатированным, просто однородная масса, очень не удобно с таким работать.
Я как представил, что предложу пользователям таким макаром таблицы создавать, сам испугался. А неформатирован код потому, что если бы он был отформатирован, то phpBB поставил бы при отображении поста на месте переносов строк теги <br />, например, между рядами таблицы, т. е. получится примерно такая "красота":
- Код: Выделить всё
<table><br /><tr><td>...</td><td>...</td></tr><br /><tr><td>...</td><td>...</td></tr><br /></table> и т.д.
Просто разрешать html в сообщениях — это с точки зрения безопасности — без комментариев. Наверное, поэтому в движке phpBB и возможности такой даже не предусмотрено. Те кто такое предлагают имею в виду просто отрубить в коде конвертацию html спецсимволов в их эквиваленты-сущности, как сказал выше — это без комментариев.
Разрешить вставку html в сообщения только, например, для администраторов.. И такой вариант иногда встречается. Но, это тоже опасно т. к. администратора могут спровоцировать на цитирование сообщения, в котором будет примерно такой код:
- Код: Выделить всё
Бла-бла-бла ну скопируй меня
бла-бла-бла[size=1]<script>alert('XSS')</script>[/size]
Бла-бла-бла, давай, жду ответа с цитатой....
Тут уже свои нюансы появляются:
Во-первых у HTML Purifier главное достоинство, что он, конечно, вычистит все потенциально опасное из кода, но он пасует перед простыми житейскими проблемами типа лишнего пробела в теге.
HTML Purifier может удалить лишние атрибуты в тегах, лишние символы после имени тега до закрывающей скобки, закрыть незарытый парный тег. Но, например, встретив в таблице такую конструкцию:
- Код: Выделить всё
<table>
< tr><td>...</td><td>...</td></tr><tr><td>...</td><td>...</td></tr>
<tr><td>...</td><td>...</td></tr><tr><td>...</td><td>...</td></tr>
</table>
или
<table>
<tr
><td>...</td><td>...</td></tr><tr><td>...</td><td>...</td></tr>
<tr><td>...</td><td>...</td></tr><tr><td>...</td><td>...</td></tr>
</table>
Задействовать его имеет смысл, если только мы приняли решение разрешить большое количество html-тегов в сообщении. Валидировать им только таблицы — не самое оптимальное решение, т. к. HTML Purifier требует много ресурсов, а, как писал выше при простых житейских трудностях может спасовать. Т. е. это как из пушки по воробьям палить.
Вообще, HTML Purifier не единственный чистильщик xml/html/css, вот интересный обзор чистильщиков http://htmlpurifier.org/comparison.
В общем, взвесив все эти факторы, я решил, что стоит попробовать реализовать возможность вставки таблиц на форуме в виде html-кода по принципу разрешения тегов и атрибутов из «Белого списка». О чем скоро напишу подробнее..