Un valore Request.Path potenzialmente pericoloso è stato rilevato dal client (*)

Sto ricevendo l’errore piuttosto auto-esplicativo:

Un valore Request.Path potenzialmente pericoloso è stato rilevato dal client (*).

Il problema è dovuto a * nell’URL della richiesta:

 https://stackoverflow.com/Search/test*/0/1/10/1 

Questo URL viene utilizzato per popolare una pagina di ricerca in cui “test *” è il termine di ricerca e il resto dell’URL si riferisce a vari altri filtri.

C’è un modo semplice per consentire questi caratteri speciali nell’URL? Ho provato a modificare il web.config , senza alcun risultato.

Devo codificare / decodificare manualmente i caratteri speciali? O c’è una buona pratica per farlo, vorrei evitare di usare stringhe di query. – ma potrebbe essere un’opzione.

L’applicazione stessa è un’applicazione di c# asp.net che utilizza il routing per produrre l’URL piacevole sopra.

Il carattere * non è consentito nel percorso dell’URL, ma non ci sono problemi nell’utilizzarlo nella stringa di query:

 http://localhost:3286/Search/?q=test* 

Non è un problema di codifica, il carattere * non ha alcun significato speciale in un URL, quindi non importa se l’URL lo codifica o meno. Dovresti codificarlo usando uno schema diverso e poi decodificarlo.

Ad esempio, utilizzando un carattere arbitrario come carattere di escape:

 query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy"); 

E decodifica:

 query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x"); 

Se stai usando .NET 4.0 dovresti essere in grado di consentire questi URL tramite web.config

    

Nota, ho appena rimosso l’asterisco (*), la stringa originale di default è:

  

Vedi questa domanda per maggiori dettagli.

Dovresti codificare il valore del percorso e poi (se necessario) decodificare il valore prima della ricerca.

Quando si ha a che fare con Uniform Resource Locator (URL) ci sono determinati standard di syntax , in questa particolare situazione si tratta di caratteri riservati .

Fino a RFC 3986 , i caratteri riservati possono (o non possono) essere definiti come delimitatori dalla syntax generica, da ciascuna syntax specifica dello schema o dalla syntax specifica dell’implementazione dell’algoritmo di dereferenziazione di un URI; E l’asterisco (*) è un carattere riservato.

La procedura migliore consiste nell’utilizzare caratteri non riservati negli URL o provare a codificarli utilizzando java.net.URLEncoder .

Continua a scavare :

  • Codifica URL Java dei parametri della stringa di query
  • Riferimento di codifica URL HTML (w3schools)
  • Quando codificare o decodificare (RFC 3986)
  • Come estrarre parametri da un determinato URL

Per me, sto lavorando su .net 4.5.2 con web api 2.0, ho lo stesso errore, l’ho impostato semplicemente aggiungendo requestPathInvalidCharacters = “” nel requestPathInvalidCharacters devi impostare caratteri non consentiti altrimenti devi rimuovere caratteri che causa questo problema

     ....    

** Si noti che non è una buona pratica, può essere un post con questo parametro in quanto l’attributo di un object è migliore o provare a codificare il carattere speciale. – Dopo aver cercato le migliori pratiche per la progettazione di api di rest, ho scoperto che nella ricerca, nell’ordinamento e nella paginazione, dobbiamo gestire il parametro di ricerca come questo

 /companies?search=Digital%26Mckinsey 

e questo risolve il problema quando lo codifichiamo e lo rimuoviamo nell’URL di% 26 in qualsiasi modo, sul server riceviamo il parametro corretto Digital & Mckinsey

questo collegamento può essere d’aiuto nella migliore pratica di progettazione di rest web api https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9

Questa eccezione si è verificata nella mia domanda ed è stata piuttosto fuorviante.

È stato generato quando chiamavo un metodo Web della pagina .aspx utilizzando una chiamata al metodo ajax, passando un object array JSON. La firma del metodo Web Page conteneva una matrice di un object .NET fortemente tipizzato, OrderDetails. La proprietà Actual_Qty è stata definita come int e la proprietà Actual_Qty dell’object JSON conteneva “4” (carattere spazio extra). Dopo aver rimosso lo spazio extra, la conversione è stata resa ansible, il metodo della pagina Web è stato raggiunto con successo dalla chiamata ajax.

Prova a impostare il server del progetto Web come Local IIS se è IIS Express. Assicurati che l’URL del progetto sia corretto e crei una directory virtuale.