【发布时间】:2011-05-03 11:55:18
【问题描述】:
我正在使用文字在产品页面控件上显示一些 javascript。基本上我所做的是在我的代码后面我声明一个新的字符串生成器,编写脚本同时插入一些动态变量来填充脚本,然后将文字文本设置为字符串生成器。这让我对 xss 攻击持开放态度。我能做些什么来防止这种情况发生?
编辑。这是字符串生成器的示例。当页面被加载时,在生成 javascript 后立即发生 xss 漏洞。
System.Text.StringBuilder sb = new System.Text.StringBuilder();
//loop through items in the collection
for (int i = 0; i < _prod.ActiveProductItemCollection.Count; i++)
{
sb.Append("<script type='text/javascript'>");
//add +1 to each item
sb.AppendFormat("mboxCreate(\"product_productpage_rec{0}\",", i+1);
sb.Append("\"entity.id=" + _prodID + "\",");
sb.Append("\"entity.categoryId=" + _categoryID + "\",");
sb.Append("\"entity.name=" + _prod.ActiveProductItemCollection[i].Title + "\",");
sb.Append("\"entity.pageURL=" + Request.Url.ToString() + "\",");
//The following value has been taken from the productImageControl code behind.
//Might have to refactor in future as a property of the image control.
string filename = AppSettingsManager.Current.ProductImagePathLarge + _prod.ActiveProductItemCollection[i].Sku
+ AppSettingsManager.Current.ProductImageExtension;
sb.Append("\"entity.thumbnailURL=" + filename + "\",");
sb.Append("\"entity.inventory=" + _prod.ActiveProductItemCollection.Count + "\",");
sb.Append("\"entity.value=" + _prod.ActiveProductItemCollection[i].ActualPrice + "\",");
sb.Append("\"entity.ProductItemID=" + _prod.ActiveProductItemCollection[i].Sku + "\",");
sb.Append("\"entity.addToCartImg=~/Images/Buttons/btn_AddToCartFlat.gif\");<");
//The last line has to be /script. < inserted on prev line. do not change it or bad things will happen.
sb.Append("/script>");
}
this.LiteralMBoxScript.Text = sb.ToString();
【问题讨论】:
-
有人可以编辑这个以使代码可读吗?
-
您最后的评论是错误的。在 C# 中追加
</script>整体并没有错。 (该问题仅适用于 HTML 中的内联<script>标记)