В ASP.NET у нас была проверка запроса, но в ASP.NET Core такой вещи нет.
Как мы можем наилучшим образом защитить приложение ASP.NET Core от XSS?
Запрос проверки пропущен :
https://nvisium.com/resources/blog/2017/08/08/dude-wheres-my-request-validation.html
- этот парень рекомендует RegEx на Models
вроде:
[RegularExpression(@"^[a-zA-Z0-9 -']*$", ErrorMessage = "Invalid characters detected")]
public string Name { get; set; }
... но это не работает для глобализации / интернационализации, то есть нелатинских символов, таких как æ, ø å *.
X-XSS для выполнения> ограниченная : https://dotnetcoretutorials.com/2017/01/10/set-x-xss-protection-asp-net-core/ Подобно этому, но поддержка ограничена только afaik:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Xss-Protection", "1");
await next();
});
app.UseMvc();
}
Документации от Microsoft два года: https://docs.microsoft.com/en-us/aspnet/core/security/cross-site-scripting?view=aspnetcore-2.1, которая на самом деле не распространяется на нее.
Я думаю сделать что-то простое, например:
myField = myField.Replace('<','').Replace('>','').Replace('&','').Repl...;
- на всех данных - но это вроде как шатко.
Я задавал тот же вопрос для Microsoft, но мне интересно узнать, как люди решают эту проблему в реальных приложениях.
Обновление: что мы пытаемся сделать:
В нашем приложении есть веб-формы, где люди могут вводить имя, адрес электронной почты, контент и тому подобное. Данные хранятся в базе данных и будут просматриваться во внешней системе и, возможно, в других системах в будущем (например, RSS-каналы, JSON и т. Д.). Некоторые формы содержат редакторы richtext (tinymce) и позволяют пользователям разметить свои тексты. Вредоносные пользователи могут ввести <script>alert('evil stuff');</script>
в полях. Что является лучшим способом удаления злых символов в ASP.NET Core до того, как он достигнет базы данных - я предпочитаю, чтобы злые скрипты вообще не сохранялись в базе данных.
Я подумал, что-то вроде этого может сработать:
const string RegExInvalidCharacters = @"[^&<>\""'/]*$";
[RegularExpression(RegExInvalidCharacters, ErrorMessage = "InvalidCharacters")]
public string Name { get; set; }
[RegularExpression(RegExInvalidCharacters, ErrorMessage = "InvalidCharacters")]
public string Content { get; set; }
...