2016-08-21 5 views
9

何かが見つからないか、asp.net coreがユーザーテキストフィールドにスクリプトタグを投稿することができますか?以前のバージョンのasp.net mvcでは、[AllowHtml]属性で許可する必要がありました。asp.netコアリクエストの有効化を有効にする

潜在的に危険な値の検証を有効にする方法がありますか?

私は、フォームポストの間に

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

ビュー:Microsoftが決めたよう

@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

これは良い質問です。私はまだその問題にぶつかっていない。 ASP.NET Coreのすべてがオプトインですので、ミドルウェアとして追加する必要があるとは思いますが、まだ移植されているかどうかはわかりません。うまくいけば私は間違っている。 –

+0

System.Webには、リクエストが無効かどうかを判断するためのロジックを保持していると思われる 'System.Web.CrossSiteScriptingValidation'というクラスがあります。すばやく見えるだけで十分にシンプルに見えます。おそらく、何かが存在しない場合、ミドルウェアをノックアップするために使用される可能性があります。 –

+1

セキュリティのために依存してはならないため、おそらくrequestvalidationが削除されたようですが、代わりに信頼できない出力を検証してエンコードする必要があります。http://forums.asp.net/t/2032496.aspx?Where+is+AllowHtml –

答えて

6

ASP.NETコアは、それはだと、Request validationに似た機能を持っていません良い考えではありません。 詳細については、ASP.NETコアの問題 'Default middleware for request validation, like IIS has'に関する説明を参照してください。

つまり、インバウンドモデルで検証が行われる必要があります。そして、Razor(.cshtml) では、指定された文字列をエンコードする@Model.Contentのようなユーザー入力を出力する必要があります。

出力されたテキストがHTML部分に含まれていない場合、これらのエスケープ方法は機能しない可能性があることに注意してください。

したがって@Html.Raw(..)は、提供されたデータが消毒されていることがわかっている場合を除いて使用します。

補足:

  • あなたは悪質な要求(例えばXSSやSQLインジェクション)に対する一般的な保護のためにWeb Application Firewall(WAF) を検討する必要があります。
  • XSS攻撃からユーザーを保護するために、Content Security Policy(CSP)を提供する をご覧ください。
関連する問題