「潜在的に危険なRequest.Path値がクライアントから検出されました(&)」


114

ホームページのリクエストであるかのようにランダムなURLをサポートする必要があるというレガシーコードの問題があります。一部のURLには、「潜在的に危険なRequest.Path値がクライアントから検出されました(&)」というエラーを生成する文字が含まれています。サイトはASP.Net MVC 3(C#)で作成され、IIS 7.5で実行されています。

ここにURLの例があります...

http://mywebsite.com/Test123/This_&_That

キャッチオールルートを設定する方法は次のとおりです(特定のページをキャッチする他のルートがあります)...

routes.MapRoute(
    "Default", // Route name
    "{garb1}/{garb2}", // URL with parameters
    new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);

web.configファイルに次のものを追加しました...

<configuration>
    <system.web>
        <pages validateRequest="false" />
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
<configuration>

また、URLをキャッチする必要があるアクションにValidateInput属性を追加しました...

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}

しかし、まだエラーが発生します。何かアイデアはありますか?私は何か見落としてますか?現在、私は自分のローカル開発サーバーで実行しています(これらの修正はまだ実稼働環境で試していません)。


1
コンピュータに戻ったときにすぐに確認する特定の文字を許可する設定があります......でも、URLをurlencodeできますか?
Adam Tuliper-MSFT、2011年


私は同じ理由で ' localhost /:// localhost / myWebsiteName 'のようなURLを作成するリダイレクトをWebサイトが内部的に試みていた理由がわかりません。ASP.netパイプラインがそれを危険な要求URLと見なしている理由がわかりません。
RBT 2016

私の場合、URLにスラッシュがありませんでした。最初に行うことは、URLのタイプミスをチェックすることです。
Kishan Vaishnav

回答:


162

あなたは設定ファイルでこれらの設定を試すことができますが

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

URLパスで「&」などの文字をアンダースコアに置き換えないでください。


13
requestPathInvalidCharacters = ""がトリックをしたようです。ありがとう。パスで&を使用しないでください。残念ながら、私たちは何年もそれを許可してきたので、引き続きサポートする必要があります。
ブライアン、

5
セキュリティの問題ではないですか?
MariusStănescu2013年

3
@MariusStanescu-これは本質的にセキュリティの問題ではありません。それはあなたがそれで何をするかに依存します。入力を取得してエスケープし、出力に含める場合は問題ありません。それが脱出されない場合、あなたは攻撃に身をさらすかもしれません。
ジャスティンヘルガーソン2013年

2
このソリューションでは、次のエラーが発生する可能性があります。HTTPエラー500.19-内部サーバーエラーページの関連する構成データが無効なため、要求されたページにアクセスできません。
トムスティッケル2015

2
この回答を使用すると、エラー500も表示されました。これは、すでに<httpRuntime>および<pages>タグがあるためであり、重複の競合がありました。それを解決した後、この答えは私にとってもうまくいきます。
Kallum Tanton 2015

5

私はこの種のエラーに直面しました。かみそりから関数を呼び出す。

public ActionResult EditorAjax(int id, int? jobId, string type = ""){}

行を変更して解決する

から

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />

私のroute.configがどこにあるか

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults
        );

1

あなたがmvcのいくつかのテキストボックスに対してのみHtmlタグを許可したい場合

あなたは一つのことができる

コントローラ内

 [ValidateInput(false)]
public ActionResult CreateNewHtml()  //view
{
    return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class
{
    repo.AddHtml(obj);
    return View();
}

1
OPは、彼がサポートする必要のあるURL(テキストボックスのコンテンツではない)を明示的に述べており、HTMLについても言及していません。そのため、あなたの答えは、与えられた質問には当てはまりません。
オリバー

2
それは質問には当てはまりませんが、選択肢であるとは知らなかったため、賛成しました。ありがとう@Pavan
MickJuice

0

Silverlight ArcGISマップビューアーがマップをロードしていない理由を理解しようとしたときに、Fiddlerで同じエラーが発生しました。私たちの場合、それはコードのURLのタイプミスでした。なぜか等号がそこにありました。
http:// someurltosome / awesome / placeの
代わりに
http:= // someurltosome / awesome / place

その等号を取り除いた後、それは(もちろん)うまくいきました。


0

以下の行がweb.configファイルに存在することを確認してください

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.