我有以下代码:
label x = txtName.Text;
当安全团队分析 dll 时,他们表示可以对上述代码执行 XSS 攻击。我知道 textboxText
属性不能防止 XSS 攻击,那我现在该怎么办?
下面的修改会解决这个问题吗?
label x = Server.HtmlEncode(txtName.Text);
我假设您在谈论 WebForms Label
- 从问题中不清楚(发布真实代码!)
这是 ASP.NET WebForms 的设计问题。许多元素都有一个名为 的属性Text
,但该属性根据元素执行不同的操作。
您希望Text
控件上的设置将设置其纯文本内容。这种安全操作就是这个名字所暗示的。这些控件就是这种情况:
不幸的是,在一堆其他控件上,同名的属性实际上设置了元素中的HTML 标记。所以如果你有一个文本字符串<b>
,你会得到一些粗体文本而不是b
一些尖括号中的字母。并且如果文本中有这样的字符串<script>
,代码会在浏览器上执行,导致安全问题。
其中一些不幸的不安全控制是:
要安全地使用这些,您必须对写入Text
属性的所有内容进行 HTML 编码。
最后,有一个控件可以双向摆动:
默认情况下,这会设置 HTML 标记(嘘!),但如果您设置Mode="Encode"
属性,它会改为设置文本。
当然,这一切都非常令人困惑,并且无法设计 Web 框架,但这就是我们必须使用的。
我认为label x = txtName.Text;
不是有效的 C#。我假设您的意思是 a 的 IDx.Text = txtName.Text;
在哪里。x
Label
这是一个问题,因为如果我<script>alert('XSS!')</script>
在文本框中输入怎么办?我的输入可以呈现到页面并作为脚本执行。那个简单的例子可能行不通,但是有很多技巧可以让 XSS 工作。
您可以通过在页面上显示之前对输入进行编码来解决此问题,我建议您使用 Microsoft AntiXSS 来完成该任务。我也同意您应该询问您的安全团队如何修复它的评论。