5

我有以下代码:

label x = txtName.Text; 

当安全团队分析 dll 时,他们表示可以对上述代码执行 XSS 攻击。我知道 textboxText属性不能防止 XSS 攻击,那我现在该怎么办?

下面的修改会解决这个问题吗?

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

2 回答 2

12

我假设您在谈论 WebForms Label- 从问题中不清楚(发布真实代码!)

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

您希望Text控件上的设置将设置其纯文本内容。这种安全操作就是这个名字所暗示的。这些控件就是这种情况:

  • 文本框
  • 按钮
  • 图像按钮
  • 项目清单

不幸的是,在一堆其他控件上,同名的属性实际上设置了元素中的HTML 标记。所以如果你有一个文本字符串<b>,你会得到一些粗体文本而不是b一些尖括号中的字母。并且如果文本中有这样的字符串<script>,代码会在浏览器上执行,导致安全问题。

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

  • 标签
  • 超链接
  • 链接按钮
  • 单选按钮
  • 复选框
  • 表格单元

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

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

  • 文字

默认情况下,这会设置 HTML 标记(嘘!),但如果您设置Mode="Encode"属性,它会改为设置文本。

当然,这一切都非常令人困惑,并且无法设计 Web 框架,但这就是我们必须使用的。

于 2013-07-01T22:07:34.147 回答
0

我认为label x = txtName.Text;不是有效的 C#。我假设您的意思是 a 的 IDx.Text = txtName.Text;在哪里。xLabel

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

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

于 2013-07-01T16:27:57.887 回答