为什么标签为x = txtName.Text;受到XSS攻击,这里有什么预防措施?

时间:2013-07-01 16:06:15

标签: c# asp.net security xss

我有以下代码:

label x = txtName.Text; 

当安全团队分析了dll时,他们说可以对上面的代码执行XSS攻击。我知道文本框Text属性不会阻止XSS攻击,所以我现在该怎么办?

以下修正案是否会解决问题?

label x = Server.HtmlEncode(txtName.Text); 

2 个答案:

答案 0 :(得分:6)

我假设你正在谈论一个WebForms Label - 这个问题并不清楚(发布实际代码!)

这是ASP.NET WebForms设计的一个问题。许多元素都有一个名为Text的属性,但该属性根据元素执行不同的操作。

您希望在控件上设置Text可以设置其纯文本内容。这种安全操作就是这个名称似乎意味着什么。这些控件就属于这种情况:

  • 文本框
  • 按钮
  • 的ImageButton
  • 列表项

不幸的是,在一堆其他控件上,同名属性实际上在元素中设置了 HTML标记。因此,如果您的文本字符串中包含<b>,则会在某些尖括号中显示一些粗体文本而不是字母b。如果文本中包含<script>等字符串,代码将在浏览器上执行,从而导致安全问题。

其中一些不幸的不安全控件是:

  • 标签
  • 超链接
  • 的LinkBut​​ton
  • 单选按钮
  • 复选框
  • 的TableCell

要安全地使用这些内容,您必须对您写入Text属性的所有内容进行HTML编码。

最后,有一个控件可以双向摆动:

  • 立即

默认设置HTML标记(boo!),但如果设置Mode="Encode"属性,则会设置文本。

这当然非常混乱,无法设计Web框架,但这就是我们必须使用的内容。

答案 1 :(得分:0)

我不认为label x = txtName.Text;是有效的C#。我假设您的意思是x.Text = txtName.Text;,其中xLabel的ID。

这是一个问题,因为如果我在文本框中输入<script>alert('XSS!')</script>怎么办?我的输入可以呈现给页面并作为脚本执行。这个简单的示例可能不起作用,但是有很多技巧可以让XSS工作。

您可以通过在页面上显示之前对输入进行编码来解决此问题,我建议Microsoft AntiXSS执行该任务。我也同意你应该问你的安全团队如何修复它的评论。