Лучший способ обрабатывать смешанный HTML и пользовательский ввод? - PullRequest
0 голосов
/ 19 ноября 2008

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

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

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

5> 3 = true

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

Ответы [ 3 ]

2 голосов
/ 19 ноября 2008

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

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

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

1 голос
/ 19 ноября 2008

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

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

0 голосов
/ 19 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...