|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2006
Messaggi: 69
|
[ASP.NET][C#] Prevenire attacchi cross-site scripting
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: 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(); <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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
|
In generale un controllo va fatto prima che il dato venga inserito, di conseguenza il controllo lo devi fare sul form dove vengono inseriti i dati.
Tu vuoi sapere COME fare il controllo? Leggi qui, penso faccia al caso tuo: http://msdn.microsoft.com/en-us/library/ms972967.aspx
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale. Go to a Wormhole |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2006
Messaggi: 69
|
Oltre al controllo in fase di inserimento, intendo eseguire anche un controllo in fase di presentazione dei dati.
In pratica non voglio dare per scontato che i valori contenuti nel database siano sicuri. Per capirci devo fare questo: Codice:
CategoriesManager catMan = new CategoriesManager();
chklistCategories.Items.Clear();
foreach (Category c in catMan.GetAllCategories())
{
ListItem item = new ListItem();
item.Text = HttpUtility.HtmlEncode(c.Name);
item.Value = c.IdCategory.ToString();
chklistCategories.Items.Add(item);
}
La mia domanda è: come faccio ad ottenere lo stesso risultato utilizzando il databinding? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
|
chklistCategories.DataTextField = HttpUtility.HtmlEncode("Name");
chklistCategories.DataValueField = HttpUtility.HtmlEncode("IdCategory"); facendo così non va bene? Purtroppo ASP.Net non ne so mezza.
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale. Go to a Wormhole |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2006
Messaggi: 69
|
No che non va bene... in quel modo codifichi solo la stringa "Name"
![]() Va bè, vorrà dire che farò così: Codice:
CategoriesManager catMan = new CategoriesManager();
chklistCategories.Items.Clear();
foreach (Category c in catMan.GetAllCategories())
{
ListItem item = new ListItem();
item.Text = HttpUtility.HtmlEncode(c.Name);
item.Value = c.IdCategory.ToString();
chklistCategories.Items.Add(item);
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:20.




















