下面是我获得checkmarx报告的代码,该报告指出它容易受到存储的XSS.it表示数据层从数据库中获取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编码,我该如何实现呢。请指导我完成这个问题。
答案 0 :(得分:0)
要在.NET Frameworks 4.0或更早版本上使用TemplateField时阻止XSS,请在aspx页面上使用Microsoft Web Protection Library。 在.NET Framework 4.5已经集成在框架上,不再需要库。
Frameworks 4.0或更早版本。
<ItemTemplate>
<asp:Label ID="Name" runat="server"
Text='<%#Microsoft.Security.Application.Encoder.HtmlEncode(Eval("Name").ToString()) %>'>
</asp:Label>
框架4.5
<ItemTemplate>
<asp:Label ID="Name" runat="server"
Text='<%#System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(Eval("Name").ToString(),true) %>'>
</asp:Label>
这将在渲染时对您的标签进行编码。仅将其用于ItemTemplate,EditItemTemplate渲染具有html输入文本,默认情况下它将由框架编码。
答案 1 :(得分:-2)
为防止XSS,您可以添加与文本框关联的服务器端CustomValidator(以防止javascript验证绕过)并设置域逻辑。
编辑(OP编辑):您还希望使用参数化查询来避免SQL错误(用户引入单引号并破坏SQL)和SQL注入。 < / p>
编辑:验证器应检查恶意/不允许的html / js / css代码。不是XSS的专家,但您可以查看OWAS以获得良好的指导。 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet