[解決済み] ASP.NET MVC カスタムモデルバインダーの使用時に、クライアントから危険なRequest.Formの値が検出されました。
質問
ここでエラーが発生します。
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
値の選択のみを許可するにはどうすればよいですか? 例えば、以下のようになります。
[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}
どのように解決するのですか?
いくつかのオプションがあります。
モデル上で、HTMLを許可する必要がある各プロパティにこの属性を追加する - 。 ベストチョイス
using System.Web.Mvc;
[AllowHtml]
public string SomeProperty { get; set; }
コントローラアクションで、すべてのHTMLを許可するためにこの属性を追加します。
[ValidateInput(false)]
public ActionResult SomeAction(MyViewModel myViewModel)
web.configでブルートフォース-。 絶対にお勧めしません。
web.config ファイルのタグ内に、httpRuntime 要素に requestValidationMode="2.0" という属性を挿入してください。また、pages 要素に validateRequest="false" 属性を追加します。
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
<pages validateRequest="false">
</pages>
</configuration>
詳細はこちら http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
上記は、デフォルトのモデルバインダーの使用に対して動作します。
カスタムモデルバインダー
上記のコードにおける bindingContext.ValueProvider.GetValue() の呼び出しは、どんな属性であっても常にデータを検証するようです。ASP.NET MVC のソースを調べてみると、DefaultModelBinder はまずリクエストの検証が必要かどうかをチェックし、検証が必要かどうかを示すパラメーターで bindingContext.UnvalidatedValueProvider.GetValue() メソッドを呼び出していることがわかります。
残念ながら、フレームワークのコードを使用することはできません。なぜなら、無知な開発者が危険なことをしないように、封印、プライベート、または何かで保護されているからです。しかし、AllowHtml と ValidateInput 属性を尊重するカスタム モデル バインダーを作成することはそれほど難しくはありません。
public class MyModelBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// First check if request validation is required
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;
// Get value
var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
if (valueProviderResult != null)
{
var theValue = valueProviderResult.AttemptedValue;
// etc...
}
}
}
もう一つの必要な要素は、検証されていない値を取得する方法です。この例では、ModelBindingContext クラスの拡張メソッドを使用しています。
public static class ExtensionHelpers
{
public static ValueProviderResult GetValueFromValueProvider(this ModelBindingContext bindingContext, bool performRequestValidation)
{
var unvalidatedValueProvider = bindingContext.ValueProvider as IUnvalidatedValueProvider;
return (unvalidatedValueProvider != null)
? unvalidatedValueProvider.GetValue(bindingContext.ModelName, !performRequestValidation)
: bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
}
}
これに関する詳細は http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/
関連
-
[解決済み】同じキーのアイテムがすでに追加されています。
-
[解決済み] HTTPヘッダを送信した後、サーバーがステータスを設定できない IIS7.5
-
[解決済み] クライアントから危険な可能性のあるRequest.Formの値が検出された
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み】ASP.NET MVC 3 RazorでAjax.BeginFormを使用する。
-
[解決済み】サービスは常にDTOを返すべきですか、それともドメインモデルも返すことができますか?
-
[解決済み】ASP.NET MVC 3 コントローラから200 HTTPステータスコードを返す方法
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
-
[解決済み] Entity Frameworkのデータベースを再作成する方法は?
-
[解決済み] 危険な可能性のあるRequest.Pathの値がクライアントから検出されました(&)" の取得
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Automapperにタイプマップの設定がない、またはマッピングがサポートされていない - エラー
-
[解決済み] Razor View throwing "The name 'model' does not exist in the current context".
-
[解決済み] RedirectToActionでURLが変更されない、またはIndexビューに移動しない
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.NET MVC ビューエンジンの比較
-
[解決済み】ASP.NET MVCのフォームでチェックボックスを処理するにはどうすればよいですか?
-
[解決済み】ASP.NET MVC Html.ValidationSummary(true) でモデルエラーが表示されない。
-
[解決済み] mvc 4 で部分ビューにパラメータを渡すにはどうすればよいですか?
-
[解決済み] HTMLヘルパーでURLを生成する
-
[解決済み] ASP.NET MVCのモデルでUrlHelperを呼び出す