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;
}
結語說明:
以上的寫法,以 方法(一) 的寫法上效能會比 方法(二) 來的好,就看大家怎麼使用了。
處理資訊安全的做法,大多會讓人覺得繁瑣,但為了系統安全,這是應該做的,因此分享一些比較基礎簡單的寫法,
後續亦會逐步更新相關寫法。
以上為的示範,寫法、觀念上不足之處,請大家見諒,也麻煩大家不吝給予指教。