Abrufen "Ein potenziell gefährlicher Request.Path-Wert wurde vom Client erkannt (&)"

114

Ich habe ein Legacy-Code-Problem, bei dem ich zufällige URLs unterstützen muss, als wären sie Anforderungen für die Homepage. Einige der URLs enthalten Zeichen, die den Fehler "Ein möglicherweise gefährlicher Request.Path-Wert wurde vom Client (&) erkannt" erzeugen . Die Site wurde mit ASP.Net MVC 3 (in C #) geschrieben und läuft unter IIS 7.5.

Hier ist eine Beispiel-URL ...

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

So habe ich meine Catch-All-Route eingerichtet (ich habe andere Routen, um bestimmte Seiten zu fangen) ...

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

Ich habe meiner web.config-Datei die folgenden Dinge hinzugefügt ...

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

Ich habe auch das ValidateInput-Attribut zu der Aktion hinzugefügt, die die URLs abfangen soll ...

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

Aber ich bekomme immer noch den Fehler. Irgendwelche Ideen warum? Habe ich etwas verpasst? Im Moment laufe ich nur auf meinem lokalen Entwicklungsserver (ich habe diese Korrekturen in der Produktion noch nicht ausprobiert).

Brian
quelle
1
Es gibt eine Einstellung, die bestimmte Zeichen zulässt, die ich in Kürze überprüfen werde, wenn ich wieder am Computer bin. Aber können Sie Ihre URL urlencode?
Adam Tuliper - MSFT
Ich weiß nicht, aus welchem ​​Grund die Website intern eine Umleitung versucht hat, bei der eine URL wie ' localhost /: // localhost / myWebsiteName ' erstellt wurde, die mir denselben Fehler verursachte. Ich weiß nicht, warum die ASP.net-Pipeline dies als gefährliche Anforderungs-URL betrachtet.
RBT
In meinem Fall fehlte mir ein Schrägstrich in der URL. Das erste, was Sie tun müssen, ist, in der URL nach einem Tippfehler zu suchen.
Kishan Vaishnav

Antworten:

162

Während Sie diese Einstellungen in der Konfigurationsdatei versuchen könnten

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

Ich würde es vermeiden, Zeichen wie '&' im URL-Pfad zu verwenden und sie durch Unterstriche zu ersetzen.

Alexander Prokofyev
quelle
13
Es scheint, dass requestPathInvalidCharacters = "" den Trick gemacht hat. Vielen Dank. Ich stimme definitiv zu, dass Sie & in the path nicht verwenden sollten. Leider erlauben wir dies seit Jahren, sodass wir es weiterhin unterstützen müssen.
Brian
5
Ist das nicht ein Sicherheitsproblem?
Marius Stănescu
3
@MariusStanescu - Es handelt sich nicht von Natur aus um ein Sicherheitsproblem. es hängt davon ab, was du damit machst. Wenn die Eingabe übernommen und maskiert und in die Ausgabe aufgenommen wird, ist dies in Ordnung. Wenn es nicht entkommen ist, können Sie sich einem Angriff öffnen.
Justin Helgerson
2
Diese Lösung kann folgenden Fehler verursachen: HTTP-Fehler 500.19 - Interner Serverfehler Auf die angeforderte Seite kann nicht zugegriffen werden, da die zugehörigen Konfigurationsdaten für die Seite ungültig sind.
Tom Stickel
2
Ich habe auch einen Fehler 500 erhalten, als ich diese Antwort verwendet habe. Dies war darauf zurückzuführen, dass bereits die Tags <httpRuntime> und <pages> vorhanden waren, sodass ein Duplizierungskonflikt auftrat. Nachdem ich das gelöst habe, funktioniert diese Antwort auch für mich.
Kallum Tanton
5

Ich habe mich dieser Art von Fehler gestellt. eine Funktion vom Rasiermesser aufrufen.

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

Lösen Sie das, indem Sie die Zeile ändern

von

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

zu

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

wo meine route.config ist

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
        );
reza.cse08
quelle
1

Wenn Sie HTML-Tags nur für wenige Textfelder in MVC zulassen möchten

Sie können eine Sache tun

in der Steuerung

 [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();
}
Pavan
quelle
1
Das OP spricht ausdrücklich von URLs, die er unterstützen muss (nicht von Textfeldinhalten), und es wird auch kein HTML erwähnt - Ihre Antwort gilt also wirklich nicht für die gegebene Frage.
Oliver
2
Es trifft nicht auf die Frage zu, aber ich habe zugestimmt, da es etwas ist, von dem ich nicht wusste, dass es eine Option ist. Danke @Pavan
MickJuice
0

Wir haben denselben Fehler in Fiddler erhalten, als wir versucht haben herauszufinden, warum unser Silverlight ArcGIS-Karten-Viewer die Karte nicht geladen hat. In unserem Fall war es ein Tippfehler in der URL im Code. Aus irgendeinem Grund gab es dort ein Gleichheitszeichen.
http: = // someurltosome / awesome / place
anstelle von
http: // someurltosome / awesome / place

Nachdem ich das Gleichheitszeichen herausgenommen hatte, funktionierte es (natürlich) großartig.

Josh P.
quelle
0

Überprüfen Sie, ob die folgenden Zeilen in Ihrer Datei web.config vorhanden sind

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

Balamurugan
quelle