HTML-кодировка на стороне сервера и на стороне клиента - PullRequest
1 голос
/ 14 июня 2010

Я хочу включить публикацию комментариев на своей странице, поэтому мне нужно выполнить некоторую HTML-кодировку, прежде чем сообщение будет отправлено и вставлено в базу данных.

Какая для этого идеальная сторона?
Сторона сервера (я работаю с asp.net) или сторона клиента (javascript)?

Ответы [ 4 ]

6 голосов
/ 14 июня 2010

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

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

Но с дезинфицирующим вводом вы даже не захотите делать это на стороне клиента;предположим, что он не санирован, и санируйте его на сервере.

В ASP.Net, если санируемый ввод является строкой, которую вы позже собираетесь отображать на странице HTML, и вы хотитеон не содержит собственных HTML-тегов, вы можете использовать HttpServerUtility.HtmlEncode для кодирования строки (в основном, превращая < в &lt; и тому подобное).

5 голосов
/ 14 июня 2010

Без сомнения, определенно на стороне сервера.Однако я бы закодировал ввод перед выводом в браузер вместо перед вводом в базу данных .

Если вы используете ASP .NET MVC, вы можете использоватьвспомогательный метод.

<%= Html.Encode("user comment with html in it <script>alert('bad')</script>") %>

Если вы используете ASP .NET (веб-формы или MVC) в среде NET 4, вы можете использовать новый синтаксис.

<%: "user comment with html in it <script>alert('bad')</script>" %>
1 голос
/ 14 июня 2010

Конечно, вы должны пойти с server side.

Если вы делаете это на стороне клиента, пользователи могут легко получить шифрование, которое вы используете.

Если это серверная сторона. Это должно быть более безопасно.

0 голосов
/ 14 июня 2010

Способ сделать это - сохранить свою страницу в UTF-8 для всех пользователей, которые могут вводить с

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

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

Каждый стек базы данных также предоставляет средства для предотвращения возможного вредоносного контента, например, mysql_real_escape_string Функция MySQL в PHP.

...