Мне кажется, это может сделать легитимный текст на иврите или арабском нечитаемым.
Одно из решений, с которым я столкнулся, — отключить алгоритмы Unicode и просто отображать какое-либо представление непечатаемых символов (по-моему, это было реализовано в Pootle).
По сути, идея состоит в том, чтобы превратить:
This text
В:
This<LRM><RLM> text
Таким образом пользователь сможет решить, является ли это вредоносным, поняв, какие именно символы используются, и, возможно, выбрать включение алгоритмов Unicode для правильного чтения текста.
Спасибо.
Спасибо, что подняли этот вопрос, мы уже учитывали эту проблему. Исправление, на которое вы сослались в исходном посте, применяется только к двунаправленным символам Unicode в блоках pre и code, будь то написанные вручную как HTML или сгенерированные из ``` размеченных блоков кода, поэтому это не должно быть проблемой для обычного текста на иврите или арабском в составленном сообщении.
#include <stdio.h>
int main() {
/* Say hello; newline<U+2067> /*/ return 0 ;
printf("Hello world.\n");
return 0;
}
#include
int main() {
/* Say hello; newline<U+2067> /*/ return 0 ;
printf("Hello world.\n");
return 0;
}
Тест: “שלום חבר” — Привет, друг
Без BIDI
Тест: “שלום חבר” — Привет, друг
Markdown:
Тест: "שלום חבר" — Привет, друг
Без BIDI
Тест: "שלום חבר" — Привет, друг
Это не самый лучший пример в мире, но суть вы уловили: это влияет только на исходный код, публикуемый на форуме. Использование BIDI-символов в исходном коде обычно не практикуется.
В данном случае для случая с выбросом существуют обходные пути (скриншоты, загрузка вложений и т. д.), и также совершенно очевидно, что специальный символ находится на своём месте.
Риск, связанный с https://trojansource.codes/, выше, чем риск незначительного нарушения в крайне редких случаях.
Однако мое предложение разбивает предложение с помощью некоторых управляющих символов, поэтому замена RLM и LRM на или покажет пользователю, что были дополнительные символы, и теперь текст отображается без них, при этом предупреждая, что это может нарушить опыт использования, и предлагая возможность вручную вернуть их обратно при необходимости. Полное удаление символов без каких-либо индикаторов не оставляет пространства для взвешенных решений.
Кроме того, это также предотвратит использование троянского исходного кода, как вы упомянули, поскольку пользователь сможет видеть вредоносный код вместе с индикаторами.
Я постараюсь сделать несколько скриншотов из Pootle. Я не помню, чтобы в последние пару лет видел там опцию для отображения необработанных строк, хотя она была очень полезна, когда мы начинали исправлять локализацию LibreOffice.