下面是我得到 checkmarx 报告的代码,指出它容易受到存储的 XSS 的攻击。它说数据层从数据库中获取数据,用于 dt 元素。然后,该元素的值在未经适当过滤或编码的情况下流经代码,并最终在 aspx 页面中显示给用户。
<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>
后面的代码
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 ClientName=@clientname and Utype=@Normal, 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();
}
我应该对传递给项目模板的所有列值进行编码,还是任何其他易受攻击的代码行。如果它的html编码,我如何实现它。请指导我解决这个问题。