2016-08-21 5 views
9

Bin ich etwas fehlt oder asp.net Core ermöglicht Skript-Tag in Benutzertextfelder zu veröffentlichen? In früheren Versionen von asp.net mvc musste ich das Attribut [AllowHtml] zulassen.Aktivieren Sie asp.net Core Request Validierung

Gibt es eine Möglichkeit, die Validierung gegen potenziell gefährliche Werte zu aktivieren?

Ich bin frei Wert wie

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

während Form Post einzureichen.

Modell:

using System.ComponentModel.DataAnnotations; 

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

Controller:

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

Ausblick:

@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

Das ist eine gute Frage. Ich habe dieses Problem noch nicht erreicht. Alles in ASP.NET Core ist opt-in, also bin ich mir ziemlich sicher, dass Sie es als Middleware hinzufügen müssen, aber ich bin mir nicht sicher, ob es schon portiert wurde. Hoffentlich liege ich falsch. –

+0

In System.Web gibt es eine Klasse mit dem Namen 'System.Web.CrossSiteScriptingValidation', die scheinbar die Logik enthält, um festzustellen, ob die Anfrage ungültig ist. Sieht aus einem kurzen Blick einfach genug aus. Vielleicht könnte das verwendet werden, um Middleware zu knacken, wenn etwas nicht bereits existiert. –

+1

Es scheint, dass Requestvalidation entfernt wurde, weil wir nicht aus Sicherheitsgründen darauf angewiesen sein sollten, stattdessen sollten wir die Eingabe validieren und die nicht vertrauenswürdige Ausgabe verschlüsseln http://forums.asp.net/t/2032496.aspx?Where is isAllowHtml –

Antwort

6

ASP.NET-Core nicht über eine Funktion ähnlich wie Request validation, wie Microsoft entschieden, dass es keine gute Idee. Weitere Informationen finden Sie in der Diskussion zum ASP.NET Core-Problem 'Default middleware for request validation, like IIS has'.

Das bedeutet, dass die Validierung auf dem eingehenden Modell stattfinden muss. Und das in der Razor (.cshtml) sollten Sie Benutzer bereitgestellten Eingabe wie @Model.Content, die die angegebene Zeichenfolge codiert ausgeben.

Bitte beachten Sie, dass diese Escaping-Techniken möglicherweise nicht funktionieren, wenn der ausgegebene Text nicht in einem Html-Teil enthalten ist.

So nicht Verwendung @Html.Raw(..) es sei denn, Sie wissen, dass die zur Verfügung gestellten Daten hygienisiert worden.

Ergänzung:

  • Sie könnten eine Web Application Firewall (WAF) für einen allgemeinen Schutz vor bösartigen Anfragen (zum Beispiel XSS oder SQL Injection) zu betrachten.
  • Zum Schutz Ihrer Benutzer vor einem XSS-Angriff können Sie auch einen Blick auf mit einem Content Security Policy (CSP) werfen.
Verwandte Themen