Как проверить это, строка не содержит HTML с помощью C#

Сложно ответить, учитывая, что мы не можем видеть ваши фактические модели здесь, но, вообще говоря, вам просто нужно использовать логический оператор ИЛИ:

albums = _albumRepository.Albums.Where(p =>
    p.Name.ToLower().Contains(_searchString.ToLower()) ||
    p.Artist.ToLower().Contains(_searchString.ToLower()) ||
    p.Genre.ToLower().Contains(_searchString.ToLower())
);

Если [ 111] / Genre на самом деле являются опорными опорами, вы просто углубитесь в них, то есть p.Artist.Name.ToLower().Contains(...) и т. Д.

26
задан Ben Mills 15 October 2008 в 13:11
поделиться

5 ответов

Я просто попробовал свой XElement. Решение для синтаксического анализа. Я создал дополнительный метод на строковом классе, таким образом, я могу снова использовать код легко:

public static bool ContainsXHTML(this string input)
{
    try
    {
        XElement x = XElement.Parse("<wrapper>" + input + "</wrapper>");
        return !(x.DescendantNodes().Count() == 1 && x.DescendantNodes().First().NodeType == XmlNodeType.Text);
    }
    catch (XmlException ex)
    {
        return true;
    }
}

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

public static string ConvertXHTMLEntities(this string input)
{
    // Convert all ampersands to the ampersand entity.
    string output = input;
    output = output.Replace("&amp;", "amp_token");
    output = output.Replace("&", "&amp;");
    output = output.Replace("amp_token", "&amp;");

    // Convert less than to the less than entity (without messing up tags).
    output = output.Replace("< ", "&lt; ");
    return output;
}

Теперь я могу взять отправленную строку пользователя и проверять, что она не содержит HTML с помощью следующего кода:

bool ContainsHTML = UserEnteredString.ConvertXHTMLEntities().ContainsXHTML();

я не уверен, пуленепробиваемо ли это, но я думаю, что это достаточно хорошо для моей ситуации.

7
ответ дан 28 November 2019 в 06:06
поделиться

Вы могли гарантировать простой текст путем кодирования входа с помощью HttpUtility. HtmlEncode.

На самом деле, в зависимости от того, как строгий Вы хотите, чтобы проверка была, Вы могли использовать ее, чтобы определить, содержит ли строка HTML:

bool containsHTML = (myString != HttpUtility.HtmlEncode(myString));
22
ответ дан 28 November 2019 в 06:06
поделиться

Здесь Вы идете:

using System.Text.RegularExpressions;
private bool ContainsHTML(string CheckString)
{
  return Regex.IsMatch(CheckString, "<(.|\n)*?>");
}

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

10
ответ дан 28 November 2019 в 06:06
поделиться

Угловые скобки не могут быть Вашим единственным вызовом. Другие символы могут также быть потенциально вредной инжекцией сценария. Такой как общий двойной дефис "-", который может также используемый во Внедрении SQL. И существуют другие.

На странице ASP.Net, если validateRequest = верный в machine.config, web.config или директиве страницы, пользователь получит ошибочную страницу, заявляя "Потенциально опасный Запрос. Значение формы было обнаружено от клиента", если HTML-тэг или различные другие потенциальные инжекционные сценарием нападения обнаруживаются. Вы, вероятно, хотите избежать этого и обеспечить более изящное, менее - страшный опыт UI.

Вы могли протестировать и на открывающие и на закрывающие тэги <> использование регулярного выражения, и позволяет текст, если только один из них происходит. Позвольте < или>, но не < сопровождаемый некоторым текстом и затем>, в том порядке.

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

2
ответ дан 28 November 2019 в 06:06
поделиться

Следующее будет соответствовать любому набору соответствия тегов. т.е. < b> this</b>

Regex tagRegex = new Regex(@"<\s*([^ >]+)[^>]*>.*?<\s*/\s*\1\s*>");

следующее будет соответствовать любому единственному тегу. т.е. < b> (это не должно быть закрыто).

Regex tagRegex = new Regex(@"<[^>]+>");

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

bool hasTags = tagRegex.IsMatch(myString);
54
ответ дан 28 November 2019 в 06:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: