Как проверить, является ли содержимое простым текстом или нет? - PullRequest
3 голосов
/ 23 апреля 2011

У меня есть текстовая область, где я принимаю только простой текст от пользователей. Я хочу убедиться, что пользователи не размещают никакой разметки в текстовой области. Я также предполагаю, что пользователи могут публиковать сообщения на разных языках. Итак, каков наилучший подход для проверки содержимого как на стороне сервера (с использованием java), так и на стороне клиента (с использованием jquery).

Любая помощь в этом отношении будет принята.

Обновление: извините, если вопрос не был достаточно ясным. Чтобы упростить это, я хочу сделать это - я позволю пользователям вводить текст в текстовой области (здесь нет расширенного текстового поля). Для каждой двойной новой строки в текстовой области я хочу показать абзац на странице HTML. Как мне сделать это правильно?

Ответы [ 2 ]

4 голосов
/ 23 апреля 2011

Нет смысла проверять пользовательский ввод в HTML-контенте. Вы можете просто экранировать HTML при повторном отображении этого пользовательского ввода на веб-странице. Поскольку вы упомянули, что вы используете Java на стороне сервера и, следовательно, вы, скорее всего, используете JSP в качестве технологии просмотра, полезно знать, что вы можете использовать JSTL <c:out> тег и fn:escapeXml() функция для выхода из HTML перед печатью для вывода.

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

<c:out value="${somebean.sometext}" />

или при повторном отображении пользовательского параметра запроса:

<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />

Таким образом, например, <script>alert('xss')</script> будет выводиться в вывод HTML как &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt; и, таким образом, будет отображаться в HTML буквально как конечный пользователь, введенный сам по себе.


Если вы действительно настаиваете на подтверждении этого, вы можете в конечном итоге получить для этого HTML-парсер, например Jsoup .

String text = request.getParameter("text");

if (!text.equals(Jsoup.parse(text).text())) {
    // There was HTML in the text.
}

Обновление в соответствии с комментариями, которые вы на самом деле хотите очистить для ввода по белому списку HTML, чтобы удалить потенциальные вредоносные теги. Вы можете сделать это и с Jsoup, см. Также эту страницу .

String sanitized = Jsoup.clean(text, Whitelist.basic());

Допустимые элементы Whitelist#basic() указаны в документации API .

0 голосов
/ 23 апреля 2011

Если вы хотите предотвратить разметку HTML, вы можете использовать регулярное выражение, чтобы выдать ошибку, если оно увидит шеврон (<) </p>

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