2016-08-21 50 views
9

Tôi có thiếu thứ gì đó hoặc lõi asp.net cho phép đăng thẻ script trong trường văn bản của người dùng không? Trong các phiên bản trước của asp.net mvc, tôi cần cho phép nó bằng thuộc tính [AllowHtml].Bật xác thực yêu cầu lõi asp.net

Có cách nào để bật xác thực lại có thể có giá trị nguy hiểm không?

tôi rảnh nộp giá trị như

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

trong bài mẫu.

mẫu:

using System.ComponentModel.DataAnnotations; 

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

Bộ điều khiển:

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

Xem:

@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

Đó là một câu hỏi hay. Tôi chưa gặp vấn đề đó. Tất cả mọi thứ trong ASP.NET Core là opt-in vì vậy tôi khá chắc chắn bạn sẽ cần phải thêm nó như middleware nhưng tôi không chắc chắn đó là được chuyển qua chưa. Hy vọng rằng tôi sai. –

+0

Trong System.Web có một lớp được gọi là 'System.Web.CrossSiteScriptingValidation' có vẻ như giữ logic để xác định nếu yêu cầu không hợp lệ. Trông đủ đơn giản chỉ trong nháy mắt. Có lẽ điều đó có thể được sử dụng để gõ lên một số phần mềm trung gian nếu một cái gì đó không tồn tại. –

+1

Dường như có lẽ requestvalidation đã bị xóa vì chúng ta không nên phụ thuộc vào nó để bảo mật, thay vào đó chúng ta nên xác thực đầu vào và mã hóa đầu ra không tin cậy http://forums.asp.net/t/2032496.aspx?Where+is+AllowHtml –

Trả lời

6

ASP.NET Core không có một tính năng tương tự như Request validation, như Microsoft đã quyết định, rằng đó là không phải là một ý tưởng tốt. Để biết thêm thông tin, hãy xem phần thảo luận về vấn đề ASP.NET Core 'Default middleware for request validation, like IIS has'.

Điều đó có nghĩa là việc xác thực phải diễn ra trên mô hình gửi đến. Và trong Razor (.cshtml) , bạn nên xuất dữ liệu đầu vào do người dùng cung cấp như @Model.Content, mã hóa chuỗi đã cho.

Hãy nhớ rằng các kỹ thuật thoát có thể không hoạt động khi văn bản được xuất không nằm trong phần Html.

Vì vậy, không sử dụng @Html.Raw(..) trừ khi bạn biết rằng dữ liệu được cung cấp đã được vệ sinh.

Bổ sung:

  • Bạn có thể muốn xem xét một Web Application Firewall (WAF) cho một bảo vệ chung chống lại yêu cầu độc hại (ví dụ XSS hoặc SQL Injection).
  • Để bảo vệ người dùng của bạn khỏi bị tấn công XSS, bạn cũng có thể xem cung cấp Content Security Policy (CSP).
Các vấn đề liên quan