DataTable 進行 HtmlEncode

  • 7102
  • 0
  • 2015-11-27

DataTable 進行 HtmlEncode

前言:

此篇是針對 Cross-Site Scripting 類別問題的紀錄,將 DataTable 中的資料做完整處理的寫法。

方法(一):

protected override DataTable setDataTable(DataTable dt)
{
    if (dt != null && dt.Rows.Count > 0)
    {
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                dt.Rows[i][j] = (dt.Rows[i][j].ToString() == null ||
                dt.Rows[i][j].ToString() == DBNull.Value.ToString())
                ? ""
                : AntiXss.GetSafeHtmlFragment(dt.Rows[i][j].ToString());
            }
        }
    }

    return dt;
}

方法(二):

protected override DataTable setDataTable(DataTable dt)
{
    DataTable cloneDt = new DataTable();
    if (dt != null && dt.Rows.Count > 0)
    {
        foreach (DataColumn column in dt.Columns)
        {
            cloneDt.Columns.Add(column.ColumnName);
        }

        foreach (DataRow row in dt.Rows)
        {
            DataRow cloneRow = cloneDt.NewRow();
            foreach (DataColumn column in dt.Columns)
            {
                cloneRow[column.ColumnName] = (row[column.ColumnName] == null ||
                row[column.ColumnName] == DBNull.Value)
                ? ""
                : AntiXss.GetSafeHtmlFragment(row[column.ColumnName].ToString());
            }

            cloneDt.Rows.Add(cloneRow);
        }
    }

    return cloneDt;
}

結語說明:

以上的寫法,以 方法(一) 的寫法上效能會比 方法(二) 來的好,就看大家怎麼使用了。

處理資訊安全的做法,大多會讓人覺得繁瑣,但為了系統安全,這是應該做的,因此分享一些比較基礎簡單的寫法,

後續亦會逐步更新相關寫法。

以上為的示範,寫法、觀念上不足之處,請大家見諒,也麻煩大家不吝給予指教。