【问题标题】:CheckMarx Stored XSS Fix in C# for DataSet and DataReaderC# 中针对 DataSet 和 DataReader 的 CheckMarx 存储的 XSS 修复
【发布时间】:2022-01-17 02:29:31
【问题描述】:

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

有没有人遇到过同样的问题并修复了 SqlDataAdapter.Fill(DataSet object) 和 SqlCommand.ExecuteReader() 方法中的 Stored XSS 问题。请更新我们的解决方案并添加以下代码参考:

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

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

2.) SqlCommand.ExecuteReader():

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

【问题讨论】:

  • checkmarx 是否将这些行显示为接收器或源? Checkmarx 中有一个数据流图,显示了潜在的受污染数据的位置和呈现的位置。我不认为这是水槽所在的地方。我认为这是更多的来源。最后向我们展示数据流向何处
  • 数据集 allFilter = SitSql.GetDataSet(commandText); GridView.DataSource = allFilter; GridView.DataBind();

标签: c# dataset xss datareader checkmarx


【解决方案1】:

根据您提供的关于您正在处理的 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 团队商议,并表明数据在显示在页面上之前已被转义。

【讨论】:

  • 感谢您的更新和另一个查询...在 .Net 中是否有任何编码技术可用于源位置的 DataSet 和 DataReader 对象,而不是在我们正在执行的目标位置进行编码数据绑定...我的意思是在以下 2 个地方是否有可用的编码技术: 1.) DataSet ds = new DataSet(); cmd.CommandTimeout = 0; SqlDataAdapter da = new SqlDataAdapter(cmd); da.填充(ds); 2.) SqlCommand cmd = CreateCommand(con, commandText); cmd.ExecuteReader();
  • 我认为没有。您必须深入数据集的杂草以对每个数据进行编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2021-11-02
  • 2022-04-11
  • 2023-01-22
  • 1970-01-01
相关资源
最近更新 更多