2016-08-21 16 views
9

Czy brakuje czegoś lub core asp.net pozwala na umieszczanie znacznika skryptu w polach tekstowych użytkownika? W poprzednich wersjach asp.net mvc musiałem zezwolić na to za pomocą atrybutu [AllowHtml].Włączanie sprawdzania poprawności żądania podstawowego asp.net

Czy istnieje sposób, w jaki sposób sprawdzanie poprawności może zawierać potencjalnie niebezpieczne wartości?

jestem wolny, aby przedstawić wartość jak

<script src='http://test.com/hack.js'></script> 

podczas formularza pocztą.

Model:

using System.ComponentModel.DataAnnotations; 

namespace Test.Models 
{ 
    public class TestModel 
    { 
     [MaxLength(500)] 
     public string Content { get; set; } 
    } 
} 

Kontroler:

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"); 
     } 
    } 
} 

Widok:

@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> 
+0

To dobre pytanie. Jeszcze nie uderzyłem w ten problem. Wszystko w ASP.NET Core jest opcjonalne, więc jestem pewien, że musisz dodać go jako oprogramowanie pośrednie, ale nie jestem pewien, czy został już przeniesiony. Mam nadzieję, że się mylę. –

+0

W System.Web istnieje klasa o nazwie "System.Web.CrossSiteScriptingValidation", która wydaje się przechowywać logikę do określania, czy żądanie jest nieprawidłowe. Wygląda dość prosto z szybkiego spojrzenia. Może to może być użyte do wybicia jakiegoś oprogramowania pośredniego, jeśli coś jeszcze nie istnieje. –

+1

Wygląda na to, że być może prośba o usunięcie została usunięta, ponieważ nie powinniśmy na niej polegać ze względów bezpieczeństwa. Zamiast tego powinniśmy zweryfikować dane wejściowe i zakodować niezaufane dane wyjściowe http://forums.asp.net/t/2032496.aspx?Gdzieś jest+AllowHtml –

Odpowiedz

6

ASP.NET Core nie posiada funkcję podobną do Request validation, jak Microsoft zdecydował, że to nie jest to dobry pomysł. Aby uzyskać więcej informacji, zobacz dyskusję na temat zagadnienia ASP.NET Core "Default middleware for request validation, like IIS has".

Oznacza to, że sprawdzanie poprawności musi mieć miejsce w modelu danych przychodzących. I że w Razor (.cshtml) powinieneś wypuścić dane wejściowe użytkownika takie jak @Model.Content, które kodują dany ciąg.

Należy pamiętać, że te techniki ucieczki mogą nie działać, gdy tekst wyjściowy nie znajduje się w części HTML.

Więc nie użyć @Html.Raw(..), chyba że wiesz, że dostarczone dane zostały poddane sanityzacji.

Suplement:

  • Możecie warto rozważyć Web Application Firewall (WAF) dla ogólnej ochrony przed szkodliwymi wniosków (np XSS lub SQL Injection).
  • Aby chronić użytkowników przed atakiem XSS, możesz również rzucić okiem na , podając Content Security Policy (CSP).
Powiązane problemy