【问题标题】:Why label x = txtName.Text; comes under XSS attack and what is the prevention here?为什么标签 x = txtName.Text;受到 XSS 攻击,这里有什么预防措施?
【发布时间】:2013-07-01 16:06:15
【问题描述】:

我有以下代码:

label x = txtName.Text; 

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

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

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

【问题讨论】:

  • 更多代码,然后我们就知道了。
  • 我刚刚从文本框中获取数据并分配给标签。我不知道为什么这行简单的代码会受到 XSS 攻击。
  • 也许安全团队可以提供一些见解?我没有看到任何会导致问题的东西,但我也不是安全专家

标签: c# asp.net security xss


【解决方案1】:

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

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

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

  • 文本框
  • 按钮
  • 图像按钮
  • 列表项

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

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

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

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

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

  • 文字

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

当然,这一切都非常令人困惑,无法设计 Web 框架,但这就是我们必须解决的问题。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 好的,我会询问安全团队,但是每个 asp.net webform 都包含页面验证属性,在我的情况下确实如此。我认为它不允许从文本框中发布文本
    • 这将使漏洞利用变得更加困难,但 RequestValidation 并非 100% 万无一失。最好关闭漏洞,尤其是在这样做很容易的情况下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多