Ci-dessous le code pour lequel j'ai reçu un rapport de checkmarx indiquant qu'il est vulnérable à XSS.it stocké dit que la couche de données obtient des données de la base de données, pour l'élément dt. La valeur de cet élément traverse ensuite le code sans être correctement filtré ou encodé et est finalement affichée à l'utilisateur dans la page ASPX.Prévention de l'attaque de script intersite dans asp.net C#
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowDeleting="GridView1_OnRowDeleting" OnPageIndexChanging="GridView1_PageIndexChanging" Width ="1000px" class="grid">
<Columns>
<asp:TemplateField HeaderText="User Name">
<ItemTemplate>
<asp:Label ID="lbl_Name" runat="server" Text='<%#Eval("Uname") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt_Name" runat="server" Text='<%#Eval("Uname") %>'></asp:TextBox> //this is the line vulnerable to XSS
</EditItemTemplate>
</asp:TemplateField>
</Columns>
Code
derrière
DataTable dt = new DataTable();
try
{
SqlConnection con = new SqlConnection(conn);
con.Open();
SqlDataAdapter adapt = new SqlDataAdapter("Select Uid,Uname,Utype,Uemail,ClientName,ProjectName,Ulog from usrtable where [email protected] and [email protected], con);
adapt.SelectCommand.Parameters.AddWithValue("@clientname", clientname);
adapt.SelectCommand.Parameters.AddWithValue("@Normal", "Normal");
adapt.Fill(dt);
con.Close();
}
if (dt.Rows.Count > 0)
{
GridView1.DataSource = dt;
GridView1.DataBind();
}
Dois-je encoder toutes les valeurs de colonne qui je passe au modèle d'élément ou est-il une autre ligne de code vulnérable. Si son encodage html, comment puis-je l'obtenir. Veuillez me guider à travers cette question.
ne pas enchaîner votre requête sql! –
@ DanielA.White vous avez oublié ce https://xkcd.com/327/ ;-) – Orangesandlemons
Tapez ce qui suit dans votre boîte de texte 'Liam OR 1 = 1' ....: O – Liam