Наш веб-сервис был поражен некоторым текстом Zalgo, и я пытаюсь найти хорошее решение для будущего. Наша политика заключается в том, чтобы принимать все входные данные пользователя и сохранять их в постоянном хранилище (мы правильно кодируем вход для нашего бэкэнд, чтобы эта часть была в порядке). Во время выходной фазы мы запускаем исходный пользовательский ввод через фильтр/парсер с помощью белого списка, чтобы избежать атак XSS и другого хаоса. В последнее время некоторые пользователи нашли мир Залго, и они просто любят причинять некоторые неприятности другим людям с этим.
Как я вижу, текст Zalgo - это всего лишь фрагмент текста Юникода, который течет из предполагаемого контейнера. В результате, я думаю, что автоматическое удаление всех сложных комбинаций персонажей является слишком резкой защитой. Кто-нибудь знает трюк CSS, чтобы заставить текст Zalgo содержаться в данном родительском элементе без каких-либо неприятных побочных эффектов?
Например, если у меня есть
<section class="userinput">
... user input here ...
</section>
как я могу убедиться, что пользовательский ввод не течет за пределами границ section.userinput
? Я думаю, overflow: hidden
или clip: rect(...)
может быть правильным ответом, но знаете ли вы что-то лучше для этого варианта использования? Я предпочитаю использовать section.userinput { max-height: 200vh; }
или что-то подобное, чтобы пользователи не могли создавать искусственно длинные комментарии. Если какой-то комментарий был длиннее 200vh
, он должен иметь полосу прокрутки только для этого комментария. Обычно для всей страницы должна быть только одна полоса прокрутки.
Обратите внимание, что я пытаюсь бороться с проблемой только в визуальном домене. Я с удовольствием принимаю любую действительную последовательность UTF-8 как пользовательский ввод, и я в порядке, если испорченный комментарий пользователя приводит к тому, что комментарий пользователя выглядит как дерьмо. Я только стараюсь избегать этого дерьма, переполненного повсюду. В частности, я не пытаюсь заблокировать текст zalgo или фильтровать zalgo-подобный текст перед отображением.