私の状況に適した解決策が見つかりました。この場合、JSONをMVCアクションに投稿するために、$.ajax
を使用してJQueryを作成しました。デフォルトのモデルバインダーは、安全なXSSが私たちのアクションに対して掲示されることを可能にするポストされたJSONを検証しません。この問題を解決するには
、私はRequestValidator
は(私が今まで見ていたすべてのソリューションがここにホイールを再発明し、黒/白のリストのための独自のXSSチェックをしたので)XSSを検出するために、特定の文字列を検証する許可静的メソッドInvokeIsValidRequestString
を持っていました。その後、適切なシナリオにアクションを限定し、ポストされたJSONを取得し、XSSが検出された場合に検証エラーをスローするだけでした。
public class ValidateJsonXssAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext?.Request;
if (request != null && "application/json".Equals(request.ContentType, StringComparison.OrdinalIgnoreCase))
{
if (request.ContentLength > 0 && request.Form.Count == 0) //
{
if (request.InputStream.Position > 0)
request.InputStream.Position = 0; // InputStream has already been read once from "ProcessRequest"
using (var reader = new StreamReader(request.InputStream))
{
var postedContent = reader.ReadToEnd(); // Get posted JSON content
var isValid = RequestValidator.Current.InvokeIsValidRequestString(HttpContext.Current, postedContent,
RequestValidationSource.Form, "postedJson", out var failureIndex); // Invoke XSS validation
if (!isValid) // Not valid, so throw request validation exception
throw new HttpRequestValidationException("Potentially unsafe input detected");
}
}
}
}
}
その後、私はちょうど標準のXSS対策をバイパスする可能性があるJSON-ポストされたデータを期待して、関連するMVCアクション飾ることができます。
[HttpPost]
[ValidateJsonXss]
public ActionResult PublishRecord(RecordViewModel vm) { ... }
を私はでそれthet OWASPの.NET勧告につまずくことが幸運でしたRequestValidatorオブジェクトを拡張することを推奨しました。これは、クエリ文字列、フォームコレクション、およびCookie値の他のシナリオでMVCによって自動的に利用されるValidateInput
によって行われた文字列の検証を公開します。誰もが他の提案を持っている場合、私は他のアプローチを見てみたいhttps://www.owasp.org/index.php/ASP.NET_Request_Validation
:詳細情報については
。