Skip to main content

A potentially dangerous Request.Form value was detected from the client – come risolvere

Se sviluppate in ASP.NET e fate largo uso di webservice e/o form HTML vi sarete senz’altro imbattuti nel problema di far “digerire” al metodo di un Controller (o a una pagina ASPX, se lavorate ancora in ASP.NET Forms) caratteri potenzialmente pericolosi. L’errore che viene riportato è il seguente:

A potentially dangerous Request.Form value was detected from the client

Questo errore, come detto, viene prodotto quando vengono passati parametri GET/POST contenenti caratteri giudicati da ASP.NET potenzialmente pericolosi, quali ad esempio parentesi HTML, carattere percentuale, virgolette e via dicendo. Di seguito sono elencati i workaround che consentono di risolvere il problema, con la inevitabile raccomandazione di applicarli solo a patto di avere la piena consapevolezza delle implicazioni di sicurezza che comportano in termini di esposizione a possibili attacchi XSS (Cross-Site Script): per maggiori informazioni al riguardo consigliamo di leggere con grande attenzione questo articolo e questa voce Wikipedia, oltre all’ottima panoramica fornita dal sito ufficiale ASP.NET a riguardo.

Se siete certi di aver compreso l’argomento e volete comunque procedere, continuate a leggere.

(altro…)

 

TimeTracker: una classe C# per misurare il tempo di esecuzione del codice

Una delle esigenze più sentite – e più importanti – quando si scrive codice è quella di trovare il modo di svolgere l’attività richiesta garantendo le migliori prestazioni possibili. Per far questo è indispensabile dotarsi di uno strumento che ci consentano di misurare il tempo di esecuzione di ciascuna operazione o blocco di operazioni, possibilmente in unità di tempo adeguate (millisecondi o nanosecondi) e con una precisione il più possibile accurata.

Ovviamente, tale strumento deve dare la possibilità di misurare più operazioni all’interno del medesimo contesto di esecuzione,  in modo che sia possibile definire vari lap e confrontarli tra loro: insomma, stiamo parlando in buona sostanza di qualcosa che fornisca le funzionalità tipiche di un comune cronometro.

Con questo obiettivo in mente alcuni anni fa ho sviluppato una classe che consente di fare esattamente questo. Il suo nome è TimeTracker e può essere utilizzata per creare un numero n di lap nel corso dell’esecuzione di un qualsiasi programma. Ciascun lap, una volta creato, può essere confrontato con qualsiasi altro lap sulla base di uno dei formati temporali disponibili: nanosecondi, microsecondi, millisecondi, secondi, minuti o ore.

(altro…)

 

ASP.NET MVC – Aggiungere uno o più percorsi di ricerca predefiniti per le View

Una delle cose maggiormente apprezzabili del modello di sviluppo MVC (se non sapete cos’è, leggete qui) è l’importanza data all’organizzazione del codice: la separazione logica dei tre aspetti di cui si compone l’applicazione si concretizza all’interno delle directory del progetto: in particolare, visto che il Model è spesso delegato a librerie esterne e relativi abstraction layers, alle cartelle /Controllers/ e /Views/, che ospitano rispettivamente gli input handler e la user interface dell’applicazione.

Tra queste, la cartella /Views/ riveste una particolare importanza a livello di filesystem in quanto viene utilizzata dal View Engine per reperire automaticamente le viste richiamate dai nostri Controller. Questa ricerca viene effettuata attraverso un insieme di percorsi di ricerca predefiniti che costituiscono il cosiddetto default location scheme. Si tratta in buona sostanza di un elenco di pattern di ricerca relativi a percorsi locali. Quella che segue è la parte del default location scheme del Razor View Engine relativa alle normali View:

(altro…)

 

ASP.NET – Inserire codice HTML nei Resource File (.resx)

Abbiamo già avuto modo di parlare in passato dei Resource File di ASP.NET, strumenti fondamentali per implementare un accesso centralizzato a contenuti testuali e multimediali della nostra applicazione, soprattutto in ottica di sviluppo multilanguage (come spiegato in questo articolo). Capita spesso, sviluppando applicazioni per il web, di avere la necessità di inserire contenuto HTML all’interno del testo contenuto in una o più chiavi di risorsa, come nell’esempio mostrato nella seguente screenshot:

(altro…)

 

Impostare un sito web multi-language con ASP.NET MVC

Premessa

Fin dal giorno della sua prima release il .NET Framework dà la possibilità agli sviluppatori di impostare un qualsiasi progetto – sia esso un Website, una Web Application, un client realizzato con Windows Forms o con il più recente approccio WPF/XAML o altro – in modalità multi-language, ovvero con supporto di localization multiple, mediante l’utilizzo dei cosiddetti Resource Files, contraddistinti dall’estensione .resx. Non è intenzione di questo articolo spiegare l’utilizzo dei Resource Files, per i quali rimandiamo all’ottimo walkthrough ufficiale presente sul sito Microsoft: ci limiteremo a ricordare che, come probabilmente già saprete, lo scopo dei Resource Files è quello di immagazzinare in un array di chiavi/valori una serie di elementi di testo e/o immagini per ciascuna lingua supportata dall’applicazione: per ottenere questo risultato lo sviluppatore non deve far altro che creare un Resource File per la lingua predefinita (ad es. l’inglese) e poi un Resource File per ciascuna lingua, utilizzando lo stesso nome del file originario con l’aggiunta del codice ISO 639-1 (two-letters language code) e, se necessario, il codice ISO 3166-1 (two-letters country code) ad essa relativi. Sarà quindi possibile, ad esempio, creare:

  • un Global.resx per immagazzinare i testi nella lingua predefinita
  • un Global.it.resx contenente le medesime chiavi con i testi tradotti in lingua italiana
  • un Global.de.resx contenente le medesime chiavi con i testi tradotti in lingua tedesca

e così via. Una volta fatto questo, sarà sufficiente utilizzare le chiavi impostate in questi file in luogo dei testi veri e propri (per sapere come, leggete il walkthrough di cui sopra): il Framework .NET penserà automaticamente a cercare la chiave nei vari Resource File, partendo da quello con l’estensione più vicina alla Localization impostata sul thread corrente e procedendo a ritroso fino a quello relativo alla lingua predefinita.

A conti fatti, si tratta di una funzionalità davvero niente male. Vediamo come utilizzarla per rendere multi-language una Web Application basata su ASP.NET MVC.

(altro…)