uReverendo
31-10-2008, 13:35
Mi sono accorto che quando eseguo manualmente il binding di dati potrei esporre il sito ad attacchi cross-site scripting.
Ad esempio in questo codice:
// Recupero le categorie e le associo al controllo.
CategoriesManager catMan = new CategoriesManager();
chklistCategories.DataSource = catMan.GetAllCategories();
chklistCategories.DataTextField = "Name";
chklistCategories.DataValueField = "IdCategory";
chklistCategories.DataBind();
// Recupero i ruoli e li associo al controllo.
chklistRoles.DataSource = Roles.GetAllRoles();
chklistRoles.DataBind();
In pratica se creo una categoria o un ruolo con questo nome:
<script type="text/javascript">alert('boom!');</script>
il testo viene eseguito anzichè visualizzato.
Mi rendo conto che dovrebbe essere impossibile inserire una categoria così chiamata, però siccome occorre considerare ogni input (anche se viene restituito da un database) malevolo, il codice non è sicuro.
Come posso risolvere il problema?
Ad esempio in questo codice:
// Recupero le categorie e le associo al controllo.
CategoriesManager catMan = new CategoriesManager();
chklistCategories.DataSource = catMan.GetAllCategories();
chklistCategories.DataTextField = "Name";
chklistCategories.DataValueField = "IdCategory";
chklistCategories.DataBind();
// Recupero i ruoli e li associo al controllo.
chklistRoles.DataSource = Roles.GetAllRoles();
chklistRoles.DataBind();
In pratica se creo una categoria o un ruolo con questo nome:
<script type="text/javascript">alert('boom!');</script>
il testo viene eseguito anzichè visualizzato.
Mi rendo conto che dovrebbe essere impossibile inserire una categoria così chiamata, però siccome occorre considerare ogni input (anche se viene restituito da un database) malevolo, il codice non è sicuro.
Come posso risolvere il problema?