Предотвращение атак Javascript и XSS - PullRequest
6 голосов
/ 10 июля 2011

Я защищаю свой веб-сайт от xss-атак на javascript и xss-атаки.Это написано в ASP.NET Webforms.

Основная часть, которую я хотел бы проверить, - это пользовательский элемент управления с текстовым полем (tinyMCE прикреплен к нему).

Пользователи могут отправлять истории на сайт, написав в этом текстовом поле.Мне пришлось установить для validateRequest значение false, поскольку я хочу получать истории пользователей в HMTL (tinyMCE).

Как следует предотвращать атаки javascript-xss?Поскольку истории пользователей - это тексты HMTL, я не могу использовать Server.HtmlEncode в их историях.Каков в целом безопасный способ получения HTML-контента от пользователя, его сохранения и последующего отображения для пользователей?

Если один пользователь помещает вредоносный код в текстовое поле и отправляет его, есть ли вероятность, что это может повредить другим людям, просматривающим этот текст?
Спасибо.

Ответы [ 3 ]

4 голосов
/ 10 июля 2011

Если вы не убираете то, что пользователь помещает в текстовое поле и отправляет, тогда да, есть вероятность причинения вреда.

Возможно, вы захотите проверить Microsoft Anti-Cross Site Scripting Library , так как она разработана, чтобы помочь разработчикам предотвратить только такие атаки.

Также стоит обратить внимание на межсайтовый скриптинг (XSS) OWASP

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

string htmlString = "<b>This is a test string</b><script>alert(\"alert!\")</script> and some other text with markup <ol><li>1234235</li></ol>";

string encodedString = HttpUtility.HtmlEncode(htmlString);
// result = &lt;b&gt;This is a test string&lt;/b&gt;&lt;script&gt;alert(&quot;alert!&quot;)&lt;/script&gt; and some other text with markup &lt;ol&gt;&lt;li&gt;1234235&lt;/li&gt;&lt;/ol&gt;

string decodedString = HttpUtility.HtmlDecode(encodedString);
// result = <b>This is a test string</b><script>alert("alert!")</script> and some other text with markup <ol><li>1234235</li></ol>

ASP.NET Controls и HTMLEncode Я собирался опубликовать информацию, которую я получил от своего класса, но я нашел ссылку, которая перечисляет ту же самую вещь (для 1.1 и 2.0), поэтому я опубликую ссылку для более легкой ссылки.Вы, вероятно, можете получить больше информации о конкретном элементе управления, не указанном в списке (или версиях 3.0 / 3.5 / 4.0, если они изменились), посмотрев на MSDN, но, по крайней мере, это должно послужить для вас кратким руководством.Дайте мне знать, если вам нужна дополнительная информация, и я посмотрю, что я смогу найти.

Элементы управления ASP.NET Стандартное кодирование HTML

Вот более полный список из одногоблогов MSDN: Какие элементы управления ASP.NET автоматически кодируются?

3 голосов
/ 10 июля 2011

Я бы пошел с сохранением закодированного в базе данных, затем при показе Decode и заменил только < на &lt;, если вы говорите, что вам нужно сохранить другие вещи.

Насколько я знаю, если заменить < XSS на самом деле невозможно, так как любой код JS должен быть внутри тегов <script>, которые должны быть выполнены, и, заменив, вы получите это в источнике HTML: &lt;script>, и пользователь увидит <script> на экране, поскольку браузер будет анализировать сущность &lt;.

При этом, если вы разрешите пользователям публиковать «необработанный» HTML, например <b>this section is bolded</b>, вам придется создать «белый список»разрешенных тегов, затем вручную замените &lt; на соответствующий HTML, например:

string[] allowedTags = new string[] { "a", "b", "img" };
foreach (allowedTag in allowedTags)
   output = output.Replace("&lt;" + allowedTag, "<" + allowedTag);
1 голос
/ 10 июля 2011

Вы видели руководство OWASP на этом

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

Одно из решений о том, как это сделать, здесь Как отфильтровать все теги HTML, кроме определенного белого списка? Но вы также должны знать, что люди могут иметь ссылку на внешний скрипт через тег изображения с URL-адресом своего собственного сервера. Смотрите примеры http://ha.ckers.org/xss.html различных типов атак, которые вам нужно защищать от

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