Asp.Net Html санитарная библиотека, добавляющая перевод строки после 256 символов - PullRequest
2 голосов
/ 30 марта 2012

Результат от

Sanitizer.GetSafeHtmlFragment("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nunc tellus, consectetur eget blandit euismod, pharetra a libero. In pretium, sem sed mollis hendrerit, libero metus condimentum tellus, eget adipiscing odio ligula at velit. Nulla luctus nisl quis sem venenatis ut suscipit mauris posuere.")

добавит перевод строки в первый пробел после 256 символов, поэтому «quis sem venenatis ut suscipit mauris posuere». будет в своем собственном ряду.

У кого-нибудь есть предложения, как это исправить или избежать?

С уважением, Mathias

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Ответ на этот вопрос был действительно прост: мы просто заменили существующие новые строки на строку маркера, выполнили санитарную обработку, удалили все появившиеся новые строки и вернули ранее существующие новые строки.

    static string newlinemarker = Guid.NewGuid().ToString();

    public static string Sanitize(string html)
    {
        //Change newlines to marker strings
        string escapedHtml = html.Replace(Environment.NewLine, newlinemarker);
        string sanitized = Sanitizer.GetSafeHtmlFragment(escapedHtml);
        //Text should not contain newlines so if the sanitizer has added any they can be removed
        sanitized = sanitized.Replace(Environment.NewLine, "");
        //Put newline back
        sanitized = sanitized.Replace(newlinemarker, Environment.NewLine);
        return sanitized;
    }

С уважением, Mathias

1 голос
/ 30 марта 2012

Просматривая исходный код, выясняется, что существует «особенность» с именем autoNewLines, которая является внутренней по отношению к классу HtmlWriter, который отвечает за генерацию этих строк новой строки. Невозможно изменить это поведение, не получив исходную сборочную копию библиотеки AntiXSS и собрав собственную версию, где для autoNewLines установлено значение false.

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

На самом деле проблема связана с этим в системе отслеживания проблем (см., В частности, комментарий erwin118, касающийся вашей проблемы): http://wpl.codeplex.com/workitem/15451

...