跨站点脚本攻击:protected void RowDataBound(对象发送方,GridViewRowEventArgs e)

时间:2015-11-04 16:59:42

标签: c# security xss

这是我在这里发表的第一篇文章:

扫描报告中有2个问题。请帮我解决这个问题:

  1. Xss攻击:protected void gvMSMQ_RowDataBound(object sender, GridViewRowEventArgs e)**

  2. 信息泄漏:lblError.Text = "RowBound - " + errorMessage + "......" + ex.Message

  3. 感谢您的帮助。

    protected void gvMSMQ_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        string Path = string.Empty;
        string errorMessage = "";
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Image img = (Image)e.Row.Cells[0].FindControl("img1");
                Literal ltrl = (Literal)e.Row.FindControl("lit1");
                ltrl.Text = ltrl.Text.Replace("trCollapseGrid", "trCollapseGrid" + e.Row.RowIndex.ToString());
                string str = "trCollapseGrid" + e.Row.RowIndex.ToString();
                e.Row.Cells[0].Attributes.Add("OnClick", "OpenTable('" + str + "','" + img.ClientID + "')");
                e.Row.Cells[0].RowSpan = 1;
                errorMessage = "Two";
                //Path = lstMSMQ[e.Row.RowIndex].Path;
                UCEnvironmentViewerQueueGrid ucQueueGrids = (UCEnvironmentViewerQueueGrid)e.Row.FindControl("ucQueueGrids");
                Classes.MSMQprofile msmqObj = new Classes.MSMQprofile();
                var rowItems = e.Row.DataItem;
                msmqObj = rowItems as Classes.MSMQprofile;
    
                ucQueueGrids.lstNormalMSMQ = msmqObj.NormalQueueList;
                //ucQueueGrids.lstJournalQueue = msmqObj.JournalQueueList;
                ucQueueGrids.BindControl();
            }
        }
        catch (Exception ex)
        {
            //error on this line!
            lblError.Text = "RowBound - " + errorMessage + "......" + ex.Message;
        }
    }
    

1 个答案:

答案 0 :(得分:2)

跨站点脚本(XSS)是一种注入漏洞。此漏洞允许恶意用户通过未经验证的输入插入自己的代码(Javascript,HTML等)。有关XSS的更多信息,请访问:OWASP Guide to XSS

扫描仪可能会根据此行发出警告:

e.Row.Cells[0].Attributes.Add("OnClick", "OpenTable('" + str + "','" + img.ClientID + "')");

使用这行代码,您可以向HTML元素添加onclick属性,然后将调用添加到OpenTable(),并将str作为参数的一部分传递。 str的值来自e中的protected void gvMSMQ_RowDataBound(object sender, GridViewRowEventArgs e),这可能是恶意输入。由于e在使用之前未经过清理,因此恶意用户可以使用e参数在onclick属性值中插入恶意代码。

第二个问题是信息泄漏。安全性最佳实践是清理错误消息,以尽可能少的信息为潜在的攻击者提供信息。错误消息可以揭示所使用技术的详细信息或系统的工作方式。此信息可用于有针对性的攻击。<​​/ p>

问题可能来自以下代码行:

lblError.Text = "RowBound - " + errorMessage + "......" + ex.Message;

当您打印ex.Message时,您可能会暴露可能在攻击中使用的错误详细信息。更好的错误消息表明发生了问题,但没有透露具体细节。有关指导,请参阅OWASP's guide to Error Handling, Auditing, and Logging