Как вы упомянули в ответе @Developer, я, вероятно, буду кодировать HTML при вводе пользователем. Если вы беспокоитесь о XSS, вам, вероятно, никогда не понадобится ввод пользователя в его оригинальной форме, поэтому вы можете также избегать его (и заменять пробелы и символы новой строки, пока вы там).
Обратите внимание, что экранирование при вводе означает, что вы должны либо использовать @ Html.Raw, либо создать MvcHtmlString для визуализации этого конкретного ввода.
Вы также можете попробовать
System.Security.SecurityElement.Escape(userInput)
но я думаю, что это также не ускользнет от пробелов. Так что в этом случае я предлагаю просто сделать .NET
System.Security.SecurityElement.Escape(userInput).Replace(" ", " ").Replace("\n", "<br>")
при вводе пользователем.
И если вы хотите глубже изучить юзабилити, возможно, вы можете выполнить анализ XML ввода пользователя (или поиграть с регулярными выражениями), чтобы разрешить только предопределенный набор тегов.
Например, разрешить
<p>, <span>, <strong>
... но не разрешать
<script> or <iframe>