DropDownList 上的默认 .NET 清理(WebControls)
Default .NET sanitization on DropDownList (WebControls)
我正在使用遗留代码 - 带有一些 .NET 的 WebControls,遇到了 XSS 问题。
在我后面的代码中,我得到了简单的 DropDownList,其中在 foreach 中添加了 ListItems,如下所示:
foreach (string enumValue in aEnumValues)
pListBox.Items.Add(new ListItem(enumValue, enumValue));
但是,当生成下拉列表时,选项的值属性没有完全清理。响应正文中的选项如下所示:
<option selected="selected" value=""><img src=2 onerror=alert(y65)>">"><img src=2 onerror=alert(y65)></option>
<option value="df">df</option>
<option value=""dsdf><img src=2 onerror=alert(y65)> "><img src=2 onerror=alert(y65)> ">"dsdf><img src=2 onerror=alert(y65)> "><img src=2 onerror=alert(y65)> </option>
如您所见,对于值属性,并非所有字符都被转义。我怎样才能解决这个问题?或者这是 WebControls 的一些问题?
ListControls 中的值通常是整数,如果您可以重构它,它将更易于维护以应对未来的任何更改。如果您想快速修复,您可能需要对 html 部分进行编码:
foreach (string enumValue in aEnumValues)
pListBox.Items.Add(new ListItem(enumValue, Server.HtmlEncode(enumValue)));
更新(根据您的评论):
如果您查看显示 html 标签的 select 标签,您是否见过显示 html 标签的 select 标签?我敢打赌 select 标签是隐藏的,它用于页面中的某些逻辑。通常选项标签中的值属性是一个单词,如整数或代码:
<select id="card">
<option value="visa">Visa</option>
<option value="mc">Master card</option> -- value is abbreviation of display text
<option value="amex">American Express</option>
</select>
<select id="lstStates">
<option value="CA">California</option> -- value is state's code
<option value="FL">Florida</option>
</select>
<select id="lstStaffs">
<option value="1001">Daniel Smith</option> --value is StaffId
<option value="1008">John Doe</option>
</select>
我正在使用遗留代码 - 带有一些 .NET 的 WebControls,遇到了 XSS 问题。 在我后面的代码中,我得到了简单的 DropDownList,其中在 foreach 中添加了 ListItems,如下所示:
foreach (string enumValue in aEnumValues)
pListBox.Items.Add(new ListItem(enumValue, enumValue));
但是,当生成下拉列表时,选项的值属性没有完全清理。响应正文中的选项如下所示:
<option selected="selected" value=""><img src=2 onerror=alert(y65)>">"><img src=2 onerror=alert(y65)></option>
<option value="df">df</option>
<option value=""dsdf><img src=2 onerror=alert(y65)> "><img src=2 onerror=alert(y65)> ">"dsdf><img src=2 onerror=alert(y65)> "><img src=2 onerror=alert(y65)> </option>
如您所见,对于值属性,并非所有字符都被转义。我怎样才能解决这个问题?或者这是 WebControls 的一些问题?
ListControls 中的值通常是整数,如果您可以重构它,它将更易于维护以应对未来的任何更改。如果您想快速修复,您可能需要对 html 部分进行编码:
foreach (string enumValue in aEnumValues)
pListBox.Items.Add(new ListItem(enumValue, Server.HtmlEncode(enumValue)));
更新(根据您的评论):
如果您查看显示 html 标签的 select 标签,您是否见过显示 html 标签的 select 标签?我敢打赌 select 标签是隐藏的,它用于页面中的某些逻辑。通常选项标签中的值属性是一个单词,如整数或代码:
<select id="card">
<option value="visa">Visa</option>
<option value="mc">Master card</option> -- value is abbreviation of display text
<option value="amex">American Express</option>
</select>
<select id="lstStates">
<option value="CA">California</option> -- value is state's code
<option value="FL">Florida</option>
</select>
<select id="lstStaffs">
<option value="1001">Daniel Smith</option> --value is StaffId
<option value="1008">John Doe</option>
</select>