Recupero di "È stato rilevato un valore Request.Path potenzialmente pericoloso dal client (&)"


114

Ho un problema con il codice precedente che richiede il supporto di URL casuali come se fossero richieste per la home page. Alcuni URL contengono caratteri che generano l'errore "È stato rilevato un valore Request.Path potenzialmente pericoloso dal client (&)" . Il sito è scritto con ASP.Net MVC 3 (in C #) ed è in esecuzione su IIS 7.5.

Ecco un esempio di URL ...

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

Ecco come posso impostare il mio percorso universale (ho altri percorsi per catturare pagine specifiche) ...

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

Ho aggiunto le seguenti cose al mio file web.config ...

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

Ho anche aggiunto l'attributo ValidateInput all'azione che dovrebbe catturare gli URL ...

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

Ma ricevo ancora l'errore. Qualche idea sul perché? Ho dimenticato qualcosa? In questo momento sto solo eseguendo sul mio server di sviluppo locale (non ho ancora provato queste correzioni in produzione).


1
C'è un'impostazione per consentire alcuni caratteri che controllerò a breve quando tornerò sul computer ... ma puoi codificare l'URL del tuo URL?
Adam Tuliper - MSFT


Non so per quale motivo il sito Web stesse provando internamente un reindirizzamento che creava un URL come " localhost /: // localhost / myWebsiteName " che mi dava lo stesso errore. Non so perché la pipeline ASP.net lo consideri un URL di richiesta pericoloso.
RBT

Nel mio caso, mancava una barra nell'URL. La prima cosa da fare sarebbe verificare la presenza di un errore di battitura nell'URL.
Kishan Vaishnav

Risposte:


162

Sebbene tu possa provare queste impostazioni nel file di configurazione

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

Eviterei di utilizzare caratteri come "&" nel percorso dell'URL sostituendoli con trattini bassi.


13
Sembra che requestPathInvalidCharacters = "" abbia fatto il trucco. Grazie. Sono assolutamente d'accordo sul fatto che non dovresti usare & nel percorso, sfortunatamente lo permettiamo da anni, quindi dobbiamo continuare a supportarlo.
Brian

5
non è un problema di sicurezza?
Marius Stănescu

3
@MariusStanescu - Non è intrinsecamente un problema di sicurezza; dipende da cosa ne fai. Se l'input viene preso e scappato e incluso con l'output andrà bene. Se non è sfuggito, potresti esporti a un attacco.
Justin Helgerson

2
Questa soluzione può fornire questo errore: Errore HTTP 500.19 - Errore interno del server Impossibile accedere alla pagina richiesta perché i dati di configurazione relativi per la pagina non sono validi.
Tom Stickel

2
Ho anche ricevuto un errore 500 durante l'utilizzo di questa risposta. Ciò era dovuto al fatto che i tag <httpRuntime> e <pages> erano già presenti, quindi si è verificato un conflitto di duplicazione. Dopo aver risolto questo problema, questa risposta ha funzionato bene anche per me.
Kallum Tanton

5

Ho affrontato questo tipo di errore. per chiamare una funzione da razor.

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

risolverlo cambiando la linea

a partire dal

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

per

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

dove si trova il mio 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

Se vuoi consentire i tag Html solo per poche caselle di testo in mvc

Puoi fare una cosa

nel controller

 [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
L'OP parla esplicitamente degli URL che deve supportare (non del contenuto della casella di testo) e non viene nemmeno menzionato l'HTML, quindi la tua risposta non si applica alla domanda data.
Oliver

2
Non si applica alla domanda, ma ho votato positivamente perché è qualcosa che non sapevo fosse un'opzione. Grazie @Pavan
MickJuice

0

Abbiamo ricevuto lo stesso errore in Fiddler quando cercavamo di capire perché il nostro visualizzatore di mappe Silverlight ArcGIS non stava caricando la mappa. Nel nostro caso si trattava di un errore di battitura nell'URL nel codice. C'era un segno di uguale lì per qualche motivo.
http: = // someurltosome / awesome / place
invece di
http: // someurltosome / awesome / place

Dopo aver tolto quel segno di uguale ha funzionato alla grande (ovviamente).


0

Verificare che le righe seguenti siano presenti nel file web.config

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.