CheckMarx在C#中为DataSet和DataReader存储了XSS修复



在对我们的旧版ASP.NET应用程序进行CheckMarx扫描后,我们在Stored XSS下发现了一些漏洞,其中提到了SqlDataAdapter.Fill(DataSet对象(和SqlCommand.ExecuteReader((方法中的问题。在研究上述两种方法的修复后,我们没有得到任何合适的解决方案,因为这两种方法是非常常见的.Net方法。

是否有任何一个面临相同的问题,并修复了SqlDataAdapter.Fill(DataSet对象(和SqlCommand.ExecuteReader((方法中的存储XSS问题。请向我们更新解决方案,并添加以下代码参考:

1.(SqlDataAdapter.Fill(DataSet对象(:

DataSet ds = new DataSet();
cmd.CommandTimeout = 0;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);

2.(SqlCommand.ExecuterRead((:

SqlCommand cmd = CreateCommand(con, commandText);
cmd.ExecuteReader();

根据您提供的信息,即您正在使用的ASP.NET web应用程序是遗留的,我认为您没有使用任何Razor模板引擎,就像大多数现代版本的ASP.NET一样,它会自动编码所呈现的数据。

然后,您必须在GridView的ItemDataBound事件中使用Server.HtmlEncode方法(或HttpServerUtility.HtmlEncode:(转义每个数据单元

void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{

if(e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[1].Text = Server.HtmlEncode(e.Row.Cells[1].Text);        
}

} 
<asp:gridview id="GridView" 
onrowdatabound="GridView_RowDataBound" 
runat="server">
</asp:gridview>

在实现此代码更改后,Checkmarx可能无法使用此事件创建数据流,因此您必须与AppSec团队一起考虑此问题,并在数据显示在页面上之前显示数据已转义。

最新更新