Ещё одни весёлые грабельки

Главные вкладки

Аватар пользователя Azerot Azerot 25 апреля 2010 в 0:59

Есть перевод модуля BBCode c drupaler.ru
При импорте перевода получаем сообщение: "One translation string was skipped because it contains disallowed HTML."

Раскопки выяснили, что ему не нравятся конструкции вида:

<s>текст</s>

которые есть в переводе английского оригинала. Это понятно, ведь при импорте Drupal использует проверку валидации строки:

<?phpfunction locale_string_is_safe($string) {
  return decode_entities($string) == decode_entities(filter_xss($string, array('a', 'abbr', 'acronym', 'address',
 'b', 'bdo', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dl',
 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'ins', 'kbd', 'li', 'ol', 'p', 'pre', 'q', 'samp',
 'small', 'span', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul',
 'var')));
}?>

Куда как видим тэг 's' не входит. Тупой вопрос - а что делать, ведь тэг есть в английском оригинале и перевод НУЖЕН с участием этого тэга?
Тупой ответ - а хрен вам! Не будет русского перевода этой строки! Во всяком случае загруженного штатными инструментами.

Но это ещё не всё интересное!
Также при загрузке перевода, Drupal не нравятся и конструкции вида:

<span style="text-decoration:underline;">текст</span>

Но смотрим список выше и видим, что тэг span там есть. Угу, есть - на жопе шерсть. Если вы используете в тексте перевода:

<span>текст</span>

оно прокатит, но кому нужен тэг span без параметров?

Вот они баги! Править их, разумеется, никто не будет, потому как не будет и всё. Просто тупо.
Точно также тупо утираемся и идём готовить SQL запрос для прогрузки перевода в БД вручную ибо не вижу других способов загрузки так нужного перевода.

Комментарии

Аватар пользователя Peritus@drupal.org Peritus@drupal.org 25 апреля 2010 в 1:18

"Azerot" wrote:
но кому нужен тэг span без параметров?

Если дать волю пользователю будет вам <span style="display: block; position: absolute; top: 0; left: 0; width: 2000px; height: 2000px; background: white">текст</span> со всеми вытекающими. Ну или еще хуже onevent javascript приатаченый.

Аватар пользователя Azerot Azerot 25 апреля 2010 в 1:17

А что значит "сырой"?
Тэги em, strong значит не сырые, а тэги u и s сырые?
А логику включения тэга span без параметров кто мне может объяснить?

И самое главное - как быть с переводом-то, если в оригинале всё это есть? Почему в английском оригинале сырой HTML разрешается и он выводится, а в переводе - а вот вам!

Аватар пользователя Azerot Azerot 25 апреля 2010 в 1:19

Quote:
Если дать волю пользователю будет вам

Это всё понятно. Но вообще-то переводы загружает не просто пользователь, а админ и предполагается, что он знает что делает, нет? Ну фиг с ним, почему бы не предусмотреть параноидальную галочку типа "отключить проверку при загрузке перевода" для администратора?

Аватар пользователя Peritus@drupal.org Peritus@drupal.org 25 апреля 2010 в 1:22

"Azerot" wrote:
Ну фиг с ним, почему бы не предусмотреть параноидальную галочку типа "отключить проверку при загрузке перевода" для администратора?

Делаешь, для пользователей Filtered HTML. Сам пользуешься Full HTML.

Аватар пользователя Dan Dan 25 апреля 2010 в 6:52

Тэги <s> и <u> считаются устаревшими, поправьте если не прав. Это во-первых.
А во-вторых, давно пора забыть про инлайн стили и использовать классы. Их ф-ция filter_xss пропустит. Обещаю.

Аватар пользователя Azerot Azerot 25 апреля 2010 в 10:59

Dan, тэг u возможно и устаревший, согласно htmlbook.ru он "осуждается" разработчиками и рекомендуется заменяться как раз теми стилями которые через span filter_xss не пропускает.

Тэг s устаревшим не считается.

Quote:
А во-вторых, давно пора забыть про инлайн стили и использовать классы

Dan, какие классы в ФАЙЛЕ С ПЕРЕВОДОМ?

В общем как я и говорил:

Quote:
Править их, разумеется, никто не будет, потому как не будет и всё. Просто тупо.

Ведь это не баг, потому что мы так считаем. И плевать что переводы не грузятся.

Как и не баг то, что я описывал при загрузке .po файла без комментариев, которые по спецификации .po файлов являются необязательными и что так и осталось без ответа:
http://drupal.ru/node/42474

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 25 апреля 2010 в 12:49

Интересно также,какого хрена они убрали href из поддерживаемых тегов. В 5ке было лучше и удобнее: скажем надо показывать ссылки по языкам или картинки, просто вставляем переводимую фразу и даём в переводах нужный html

Аватар пользователя Azerot Azerot 10 ноября 2015 в 11:46

Нет, я-то для себя проблему решил. Чтобы каждый раз ручками в базу не лазить я написал маленький патч, который в итоге выглядит так на странице admin/build/translate/import:

[img]http://drupal.ru/files/trhack.jpg[/img]

Вот и всё! Ставлю галочку, патч отключает проверку и ЧИХАЛ Я - загружает всё!

Аватар пользователя Dan Dan 25 апреля 2010 в 14:52

"Azerot" wrote:
Dan, тэг u возможно и устаревший, согласно htmlbook.ru он "осуждается" разработчиками и рекомендуется заменяться как раз теми стилями которые через span filter_xss не пропускает.
Тэг s устаревшим не считается.

Если брать за источник htmlbook.ru, то:
Для U -- Этот тег осуждается спецификацией HTML, взамен рекомендуется использовать стили.
Для S -- теги и осуждаются спецификацией HTML, взамен них рекомендуется использовать стили.
Вроде оба.

"Azerot" wrote:
Dan, какие классы в ФАЙЛЕ С ПЕРЕВОДОМ?

CSS. <span class="module-class">text</span>. Чем это хуже инлайн-стилей? И как ты собираешься менять инлайн-стили, заданные разработчиком модуля?

Аватар пользователя Azerot Azerot 25 апреля 2010 в 16:55

Quote:
Чем это хуже инлайн-стилей?

Хуже тем, что кто-то должен потом догадаться взять .css и куда-то положить или добавить в существующий.
А главное хуже тем, что после загрузки перевода с такими конструкциями, вместо того что должно быть видно - ничего видно не будет.

<u> = <ins>
<s> = <del>

Замену для цветов, шрифтов и прочего, что обеспечивает BBCode назовёте?

И главный вопрос моим оппонентам. Английский вариант, вызывается через t() и прекрасно отображается со всеми этими тэгами. Почему же такие 2-е стандарты? Либо запрещайте везде, либо разрешайте везде. Почему оригинал обрабатывается по одним правилам, а перевод по другим?

Аватар пользователя Dan Dan 25 апреля 2010 в 18:13

"Azerot" wrote:
Хуже тем, что кто-то должен потом догадаться взять .css и куда-то положить или добавить в существующий.

Не кто-то, а разработчик. Если разработчик не умеет работать с CSS, - его личные внутренние проблемы. А вот если в тексте будут инлайн-стили (зелёный текст на красном фоне), то придётся затратить на порядок больше телодвижений, чтобы это изменить.

"Azerot" wrote:
Замену для цветов, шрифтов и прочего, что обеспечивает BBCode назовёте?

Не работал с модулем BBCode, но если нельзя сделать замену [u] на <span class="text-underline">, то зачем этот модуль?

"Azerot" wrote:
И главный вопрос моим оппонентам. Английский вариант, вызывается через t() и прекрасно отображается со всеми этими тэгами.

А вот это наверное баг, что текст не проходит через XSS фильтр.

Аватар пользователя Azerot Azerot 25 апреля 2010 в 19:15

А ну да. Прямые руки - это баг. Будем выкривлять Smile

Постарайтесь понять одну простую мысль. Да, я понимаю, что в некоторых местах необходима проверка строк на HTML тэги, чтобы не допустить внедрения вредоносных тэгов и тэгов которые сбивают оформление. Но поймите и вы, что перевод загружает не простой пользователь, а пользователь, который имеет некие административные права. Администратор, по моему глубокому убеждению обязан обладать ВСЕМИ ВОЗМОЖНЫМИ полномочиями и возможностями - его не надо ни в чём ограничивать. Если администратор загружает кривой перевод - это его проблема, потому что он должен понимать что к чему - иначе он не администратор. Зато он может его загрузить, что бы там ни было! Всех ситуаций не предусмотреть и не разработчикам решать за администратора сайта как ему этот сайт делать - это не их задача. Их задача - предоставить максимально гибкий и подходящий инструмент для создания сайта. Здесь нет дыры в безопасности, потому что загрузка перевода не доступна обычным пользователям. Точно также как и PHP-фильтр ввода, может быть использован во зло и во благо и это почему-то никого не напрягает!

Аватар пользователя Crea Crea 25 апреля 2010 в 20:10

Azerot, помощь модуля BBCode кривая. Там много чего криво сделано. Баг репорт есть, только вот желающих написать нормальную инструкцию на английском нет. Оно и понятно - "многабукаф" Smile

Аватар пользователя Azerot Azerot 25 апреля 2010 в 20:20

Quote:
А если администратор домохозяйка?

А разве Drupal это продукт, ориентированный на домохозяек? Smile

Quote:

Azerot, помощь модуля BBCode кривая. Там много чего криво сделано. Баг репорт есть, только вот желающих написать нормальную инструкцию на английском нет. Оно и понятно - "многабукаф" Smile

Я не вижу способа нормально написать на английском то, что там изображено в помощи. Т.е. если нужен пример того как это будет выглядеть - нужны полноценные HTML-тэги или предложенный Dan'ом стиль. Но стиль на мой взгляд - это подпорка. Опять же так и не понимаю - зачем?

Аватар пользователя Crea Crea 25 апреля 2010 в 20:45

Quote:
А вот это наверное баг, что текст не проходит через XSS фильтр.

Разработчик модуля - доверенное лицо. а вот переводчик может быть злоумышленником. Поэтому данная ситуация достаточно логична.

Quote:

Я не вижу способа нормально написать на английском то, что там изображено в помощи. Т.е. если нужен пример того как это будет выглядеть - нужны полноценные HTML-тэги или предложенный Dan'ом стиль.

Конкретнее, с чем проблема ?

Аватар пользователя Azerot Azerot 25 апреля 2010 в 22:55

Вот с этим:
http://drupal.ru/filter/tips/1#filter-bbcode-0
Цвета, размер шрифтов, href, и т.д.

Quote:
Разработчик модуля - доверенное лицо. а вот переводчик может быть злоумышленником. Поэтому данная ситуация достаточно логична.

Переводчик не может САМ загрузить тот перевод, который он сделал. Перевод загружает самое доверенное лицо на сайте - администратор или наделённое полномочиями лицо.

Аватар пользователя Crea Crea 25 апреля 2010 в 23:15

Quote:
Переводчик не может САМ загрузить тот перевод, который он сделал. Перевод загружает самое доверенное лицо на сайте - администратор или наделённое полномочиями лицо.

Тогда администратор должен иметь отдельный инструментарий для проверки всех текстов на предмет запрещенного кода. Ну так вот Друпал и дает такой инструментарий, только не дает возможность выбрать разрешенные теги. В d7 вроде бы над этим работают.
У вас есть отличная возможность проявить инициативу и предложить свой патч в ядро Wink

Аватар пользователя Azerot Azerot 26 апреля 2010 в 8:17

Quote:
Тогда администратор должен иметь отдельный инструментарий для проверки всех текстов на предмет запрещенного кода.

Он его имеет - голова на плечах не для того, чтобы туда есть.

Quote:
Ну так вот Друпал и дает такой инструментарий, только не дает возможность выбрать разрешенные теги

Тогда это не инструмент проверки - это инструмент ТУПОГО запрета. Если бы было предупреждение, а затем возможность грузить или нет - я бы согласился.

Кроме того, Друпал почему-то не даёт возможность проверять корректность кода модулей, загружаемых в него, что на мой взгляд в разы опасней. И если вы считаете разработчика модуля доверенным лицом, то советую обратить внимание на работу например такого модуля как wghtml, отмеченного как рекомендованный к d5. Что он сделает с вашей базой данных и сайтом за полгода его использования - это разговор отдельный.

Quote:
У вас есть отличная возможность проявить инициативу и предложить свой патч в ядро ;)

А вы сами пробовали что-либо предложить на d.org? Попробуйте сперва, потом поговорим. Посмотрите сколько багов открытых - какие там патчи в ядро - сперва баги пофиксят пусть.

Аватар пользователя Crea Crea 26 апреля 2010 в 11:25

Quote:
А вы сами пробовали что-либо предложить на d.org? Попробуйте сперва, потом поговорим.

Мой трекер. Как видите, пробовал, пробую и буду пробовать, так что мимо Wink
Друпал ровно настолько хорош (или плох), насколько его делают таким добровольцы, и это ВЫ в том числе! Wink

Аватар пользователя Azerot Azerot 26 апреля 2010 в 11:39

Мой опыт пока негативен. Возможно виной недостаточное знание английского.
Было несколько вопросов на форуме (не самых тупых кстати) - ноль внимания.
Один баг мной запощен - две недели тишина.

А по поводу данного вопроса я вряд ли толково на английском смогу объяснить что мне не нравится в данной ситуации и почему её необходимо менять. Тем более, если уж здесь тема воспринимается далеко не однозначно.

Аватар пользователя Dan Dan 26 апреля 2010 в 12:59

- Он его имеет - голова на плечах не для того, чтобы туда есть.
Администратор нужен для управления сайтом, а не работы с переводами. Ты собираешься переводить мультиязычный сайт сам? Например русско-китайский или англо-французкий. Ты полностью доверяешь людям которые будут переводить?

- Кроме того, Друпал почему-то не даёт возможность проверять корректность кода модулей, загружаемых в него, что на мой взгляд в разы опасней.
Как ты себе это представляешь?

И если вы считаете разработчика модуля доверенным лицом,
Я считаю, что разработчик в большинстве случаев более компетентен, чем администратор, на то он и разработчик. Однако это не исключает кривого кода.

Аватар пользователя Azerot Azerot 26 апреля 2010 в 13:13

Quote:
Администратор нужен для управления сайтом, а не работы с переводами.

Кто его заставляет переводить? Но проверить что загружаешь на сайт кто должен?

Quote:
Ты собираешься переводить мультиязычный сайт сам? Например русско-китайский или англо-французкий. Ты полностью доверяешь людям которые будут переводить?

Сам переводить на китайский не буду. Но если я человек, который заботится о безопасности сайта, то проверить что же там не понравилось Друпал можно и должно! Но если я считаю, что всё в порядке, то Drupal в свою очередь должен и обязан мне позволить загрузить то, что я решил.

Quote:
Как ты себе это представляешь?

О! Мы на "ты" уже? Smile Ладно, я согласен.
Dan, а ты что незнакомые модули сразу в продуктивный сайт устанавливаешь без проверки на тестовом сайте что ли? И доверяешь при это разработчикам? Средствами Drupal это не проверить, так на то и администратор с его умной головушкой, поставить потестить, пройтись по всем менюшкам и ручкам, убедиться, что нигде ничего не пропало и не падает.

Аватар пользователя Dan Dan 26 апреля 2010 в 14:15

— Кто его заставляет переводить? Но проверить что загружаешь на сайт кто должен?
Не, загружать перевод не всегда возможно. Для шлифовки переводов надо давать права на перевод и ставить localization_client. А как только ты даёшь права - сразу теряешь контроль над переводами.

— Но если я считаю, что всё в порядке, то Drupal в свою очередь должен и обязан мне позволить загрузить то, что я решил.
Мне кажется что проблема единична, где ещё она может возникнуть? Может проще изменить модуль bbcode?

— Dan, а ты что незнакомые модули сразу в продуктивный сайт устанавливаешь без проверки на тестовом сайте что ли?
Ручная проверка это понятно, я не понимаю что ты подразумеваешь под "Друпал ... не даёт возможность проверять корректность кода модулей, загружаемых в него".

Аватар пользователя Azerot Azerot 26 апреля 2010 в 14:26

Quote:
Не, загружать перевод не всегда возможно. Для шлифовки переводов надо давать права на перевод и ставить localization_client. А как только ты даёшь права - сразу теряешь контроль над переводами.

Так дайте выбор администратору! ВЫБОР понимаешь? Не тупой запрет, что нельзя, а выбор решить можно или нет!

Quote:
Мне кажется что проблема единична, где ещё она может возникнуть? Может проще изменить модуль bbcode?

А мне кажется, что проблема может встретится и в других местах, особенно в хелпах к модулям, которые предоставляют дополнительные форматы ввода. Да и в самих переводах местами хочется что-то выделить красным, а как? Стили каждый раз свои рисовать - это подпорки.

Quote:
Ручная проверка это понятно

Вот и мне понятно! И поэтому если я руками проверил и решил, что мне надо, Друпал должен позволить мне это сделать! Хотя бы потому что мне в данном случае видней, чем разработчикам.