удалить HTML-теги или теги скрипта в строке C #, а также в клиенте с помощью JavaScript - PullRequest
0 голосов
/ 31 января 2011

Мне нужно выполнить проверку ввода пользователя, и я хочу, чтобы она проверялась как на стороне клиента, так и на стороне сервера.У меня есть текстовое поле ang, в котором пользователь может написать свой комментарий к продукту, и теперь я хотел проверить, нет ли в его комментарии каких-либо инъекций, таких как html или javascripts.Итак, что я хотел сделать, после того, как пользователь нажал на кнопку submit

1.) Клиентская сторона: как я выполню проверку, как если бы пользователь вводил такие строки

<a href="">abcd</a> // I will accept only abcd and remove the anchor tag but the abcd should appear as a link
<script type="text/javascript">alert(123);</script> // I will accept only alert(123);as the valid string
<b>abcd</b> // I will display abcd but it must appear bold

2.) Сторона сервера: та же ситуация со стороной клиента, я удалю теги введенного скрипта и теги html.Я использую sharepoint 2007, я не уверен, есть ли встроенная функция для такого рода проверки в sharepoint api или c # для проверки на стороне сервера.

Примечание: я не хочуиспользуйте RegEx для этого или любого стороннего программного обеспечения.Я знаю, что многие эксперты могут помочь мне в этом.Большое вам спасибо!

Ответы [ 3 ]

0 голосов
/ 31 января 2011

Хотя RegEx - это, вероятно, ваш лучший выбор, вы можете использовать его и изменить по своему вкусу:

public static string StripHtml(this string source)
{
    string[] removeElements = new string[] { "a", "script" };
    string _newString = source;
    foreach (string removeElement in removeElements)
    {
        while (_newString.ToLower().Contains("<" + removeElement.ToLower()))
        {
            _newString = _newString.Substring(0, _newString.ToLower().IndexOf("<" + removeElement.ToLower())) + _newString.Substring(_newString.ToLower().IndexOf("</" + removeElement.ToLower() + ">") + removeElement.Length + 3);
        }
    }
    return _newString;
}

Вы будете использовать string clean = txtInput.Text.StripHtml();

0 голосов
/ 04 февраля 2011

Если вы хотите предотвратить атаки с использованием JavaScript, просто закодируйте ввод пользователя Server.HtmlEncode(message).
Но если вам нужно очистить некоторые теги, тогда Омар Аль Забир написал хорошую статью Преобразование HTML в XHTML и очистку ненужных тегов и атрибутов

// Encode the string input
StringBuilder sb = new StringBuilder(
                        HttpUtility.HtmlEncode(htmlInputTxt.Text));

// Selectively allow <b> and <i>
sb.Replace("&lt;b&gt;", "<b>");
sb.Replace("&lt;/b&gt;", "");
sb.Replace("&lt;i&gt;", "<i>");
sb.Replace("&lt;/i&gt;", "");
Response.Write(sb.ToString());

Я также хотел бы рекомендовать вам проверить проект AntiSamy.NET , но я не пробовал сам.

0 голосов
/ 31 января 2011

Я не уверен в создании проверки для этого. Но вы можете программно удалить теги, используя эту функцию.

Используйте эту функцию для удаления тега Html из значения текстового поля, введенного пользователем

public static string StripHtml(string html, bool allowHarmlessTags)
{
   if (html == null || html == string.Empty)
     return string.Empty; 

   if (allowHarmlessTags)
     return System.Text.RegularExpressions.Regex.Replace(html, "", string.Empty); 

   return System.Text.RegularExpressions.Regex.Replace(html, "<[^>]*>", string.Empty);
}
...