実現したいこと
C#、ASP.NET Core MVC(.NET 5 または .NET Core 3.1) でのjson post時のXSS対策について困っています。
例えば、javascript gridに直接入力したデータについて、200~300レコード程度のデータをjavascriptからjsonでpostします。
(サーバー側では、DBにデータ追加か、データ変更があるものに更新をかけます)
以前、ASP.NET MVC 5 を利用していた時、json post時は下記の記事のように、
Controller側で[ValidationJsonXss]属性を追加して利用していました。
XSS validation from MVC action from JSON ajax post
https://stackoverrun.com/ja/q/12580451
C#
1using System; 2using System.IO; 3using System.Web; 4using System.Web.Mvc; 5using System.Web.Util; 6 7namespace WebApplication.Common { 8 9 public class ValidateJsonXssAttribute : ActionFilterAttribute { 10 public override void OnActionExecuting(ActionExecutingContext filterContext) { 11 var request = filterContext.HttpContext.Request; 12 13 if (request != null && "application/json; charset=UTF-8".Equals(request.ContentType, StringComparison.OrdinalIgnoreCase)) { 14 if (request.ContentLength > 0 && request.Form.Count == 0) { 15 16 // InputStream has already been read once from "ProcessRequest" 17 if (request.InputStream.Position > 0) { 18 request.InputStream.Position = 0; 19 } 20 21 using (var reader = new StreamReader(request.InputStream)) { 22 // Get posted JSON content 23 var postedContent = reader.ReadToEnd(); 24 25 // Invoke XSS validation 26 int failureIndex; 27 var isValid = RequestValidator.Current.InvokeIsValidRequestString( 28 HttpContext.Current, postedContent, RequestValidationSource.Form, "postedJson", out failureIndex 29 ); 30 31 // Not valid, so throw request validation exception 32 if (!isValid) { 33 throw new HttpRequestValidationException("Potentially unsafe input detected"); 34 } 35 } 36 } 37 } 38 } 39 } 40}
本題ですが、
- 上記の方法をASP.Net Core MVC用に置き換えるか、新しいソースへ変更したいと思っていますが、
英語記事など探してもなかなか最善の方法が見つからなく困っています。
- その他、何か最善の方法があれば、ご教授ください。
よろしくお願いします。
参考にした記事
・ASP.NET Core でクロスサイトスクリプティング (XSS) を防止する
https://docs.microsoft.com/ja-jp/aspnet/core/security/cross-site-scripting?view=aspnetcore-5.0
・HttpUtility.HtmlEncode メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.web.httputility.htmlencode?view=net-5.0
・XSS validation from MVC action from JSON ajax post
https://stackoverrun.com/ja/q/12580451
・XSS Prevention .NET Core 2.x and above
https://stackoverflow.com/questions/59770235/xss-prevention-net-core-2-x-and-above
補足情報(FW/ツールのバージョンなど)
.NET 5 または .NET Core 3.1
C#、ASP.NET Core MVC
Visual Studio 2019 Professional
回答2件
あなたの回答
tips
プレビュー