Включить проверку основного запроса asp.net
Я что-то упустил или ядро asp.net позволяет публиковать тег скрипта в текстовых полях пользователя? В предыдущих версиях asp.net mvc мне нужно было разрешить его по атрибуту [AllowHtml].
Есть ли способ, как включить проверку против потенциально опасных значений?
Я свободен, чтобы представить значение как
<script src='http://test.com/hack.js'></script>
во время публикации формы.
Модель:
using System.ComponentModel.DataAnnotations;
namespace Test.Models
{
public class TestModel
{
[MaxLength(500)]
public string Content { get; set; }
}
}
контроллер:
using Microsoft.AspNetCore.Mvc;
using Test.Models;
namespace Test.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
var model = new TestModel { Content = "Test" };
return View();
}
[HttpPost]
public IActionResult Index(TestModel model)
{
if(!ModelState.IsValid)
return View(model);
return Content("Success");
}
}
}
Посмотреть:
@model TestModel
<form asp-action="Index" asp-controller="Home" method="post">
<div asp-validation-summary="All"></div>
<label asp-for="Content">Content<strong>*</strong></label>
<span asp-validation-for="Content"></span>
<input asp-for="Content" type="text" />
</div>
</form>
1 ответ
В ASP.NET Core нет функции, аналогичной проверке запросов, поскольку Microsoft решила, что это не очень хорошая идея. Для получения дополнительной информации см. Обсуждение проблемы ASP.NET Core " Промежуточное программное обеспечение по умолчанию для проверки запросов, как в IIS".
Это означает, что проверка должна выполняться на входящей модели. И что в Razor (.cshtml) вы должны выводить вводимые пользователем данные как @Model.Content
, который кодирует данную строку.
Помните, что эти экранирующие методы могут не работать, если выводимый текст не находится внутри HTML-части.
Так что не используйте @Html.Raw(..)
если вы не знаете, что предоставленные данные были продезинфицированы.
Дополнение:
- Возможно, вы захотите использовать брандмауэр веб-приложений (WAF) для общей защиты от вредоносных запросов (например, XSS или SQL-инъекция).
- Для защиты ваших пользователей от атаки XSS вы также можете взглянуть на предоставление Политики безопасности контента (CSP).