Logo UGIdotNET

Validare la QueryString di input per un ObjectDataSource

Una delle nuove features piu utili della classe ObjectDataSource e' la possibilita' di prendere i dati di input direttamente da varie fonti e in particolare dalla QueryString usando il tag <asp:QueryStringParameter> dentro al tag <SelectParameters>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"
    SelectMethod="..." TypeName="..." OnSelecting="ObjectDataSource1_Selecting">
    <SelectParameters>
        <asp:QueryStringParameter Name="letter" QueryStringField="list" Type="String" DefaultValue="a" />
    </SelectParameters>
</asp:ObjectDataSource>

Il problema risiede nel fatto che se l'ObjectDataSource e' collegato direttamente ad una query di un Dataset, il dato passato nella QueryString verra' usato direttamente nella query come parametro senza alcuna validazione.
Questo puo' portare ad una situazione di "SQL Injection" che puo' compromettere la sicurezza e anche i dati nel database.

La soluzione e' validare il dato prima che sia passato al Dataset nel metodo Selecting dell'ObjectDataSource nel code behind.
Nell'esempio che segue la validazione e' molto semplice perche' il dato deve essere di lunghezza unitaria:

/// <summary>
///  Validates the querystring value to be assigned to the query parameter letter
/// </summary>
protected void  ObjectDataSource1_Selecting( object  sender, ObjectDataSourceSelectingEventArgs e)
{
    String letter = Server.HtmlEncode(( string )e.InputParameters["letter"]);
    if (letter.Length > 1) 
        letter = letter.Substring(0, 1);
    e.InputParameters["letter"] = letter;
}

In casi piu' complicati e' necessario usare ulteriori protezioni, come la validazione tramite regular expession e altre tecniche come illustrato nel seguente articolo:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000002.asp

Autore: Michele Bersani
Data: 13 febbraio 2006
Ultimo aggiornamento: 13 febbraio 2006
Categorie:  ASP.NET

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185