Nano Hash - криптовалюты, майнинг, программирование

Лучший способ обработки смешанного HTML и пользовательского ввода?

В приложении PHP, которое я пишу, я хотел бы, чтобы пользователи вводили в текст сочетание HTML и текста с остроконечными скобками, но когда я отображаю этот текст, я хочу, чтобы теги HTML отображались тегами, отличными от HTML. быть показанным литературно, т.е. пользователь должен иметь возможность ввести:

<b> 5 > 3 = true</b>

при отображении пользователь должен увидеть:

5 > 3 = верно

Каков наилучший способ разобрать это, т.е. найти все скобки, отличные от HTML, преобразовать их в и?

19.11.2008

Ответы:


1

Я бы порекомендовал пользователям ввести разметку в стиле BBcode, которую вы затем замените тегами html:

[b]This is bold[/b]
[i]this is italic with a > 'greater than' sign there[/i]

Это дает вам больше контроля над тем, как вы анализируете ввод пользователя в html, хотя я признаю, что это выглядит ненужным бременем.

19.11.2008
  • Однако на самом деле это не приводит к корню проблемы, а именно к тому, что если он хочет разрешить HTML/BBCode, ему придется иметь дело с XSS. Написать хороший парсер BBCode непросто; написание хорошего парсера HTML тем более. 19.11.2008

  • 2

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

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

    19.11.2008

    3

    Лучше всего было бы сделать наоборот: вместо того, чтобы находить не-HTML-скобки и экранировать их, сначала экранируйте все, а затем ищите &lt;b&gt; и &lt;/b&gt; и экранируйте только эти особые случаи. Таким образом, вы не рискуете, что пользователь внедрит вредоносный HTML-код на вашу страницу (если вы попытаетесь скрыть только то, что необходимо, вы рискуете упустить что-то важное).

    19.11.2008
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..