3

値を含むクエリ文字列を Body=%3Ch2%3E (Body=<h1>) servicestack レスト エンドポイントに送信しています。その結果、次のようになります。

潜在的に危険な Request.QueryString 値がクライアントから検出されました (Body=\"<h2>\")。

MVC 4 では、モデル内のフィールドを [AllowHtml] で次のように装飾すると、特定のフィールドに Html コンテンツを許可できることがわかっています。

[AllowHtml] public string Body { get; 設定; }

それをしましたが、エラーは解決しません。サービス スタックが検証プロセスに適切に参加していないのではないかと疑っていたので、同じモデルで純粋な MVC 4 コントローラーを作成してテストしたところ、問題なく動作しました。

ただし、ServiceStack のソリューションが必要です。彼らのドキュメンテーションは薄く、Google 検索はどこにも通じません。

4

1 に答える 1

9

ASP.NET アプリケーション内で ServiceStack サービスをホストしているようです。

<system.web>アプリケーション全体のリクエスト検証を無効にするために、web.config ファイルのセクションに次を追加できます。

<system.web>
    <httpRuntime requestValidationMode="2.0" />
    ...
</system.web>

また、アプリケーション全体ではなく、特定のエンドポイントに対してのみ要求の検証を無効にする場合は<location>、web.config で次のタグを使用します。

<location path="hello">
    <system.web>
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
</location>  

/helloこれにより、アプリケーション内のすべてのエンドポイントに対するリクエストの検証が無効になります。たとえば、動作します/hello?Body=%3Ch2%3Eが動作し/bar?Body=%3Ch2%3Eません。

ASP.NET での要求の検証の詳細については、following MSDN article.

また、ServiceStack サービスを自己ホストしている場合は、明らかにこれについて心配する必要はありません。

于 2012-12-28T22:43:22.687 に答える