【问题标题】:Unescaped string in attributes by BlazorBlazor 属性中未转义的字符串
【发布时间】:2020-12-31 01:06:37
【问题描述】:

我目前正在使用 Blazor(服务器)研究 XSS 的可能性和危险。

通常,Blazor 会自动输出字符串编码。我have read 那,这可以通过使用MarkupString 类来避免。

这对于正常的文本输出效果很好,但如果变量在属性内则不行。如果这是我的模板

<div class="page @(myString)">
@(myString)
</div>

@code {
   MarkupString myString = new MarkupString("\" foo");
}

那么渲染的输出就变成了

<div class="page &quot; foo">
" foo
</div>

第一次出现的 MarkupString 会被编码,第二次不会。

有人可以向我解释这种不同的行为吗?有什么方法可以防止第一种情况下的编码吗?

【问题讨论】:

    标签: .net security encoding blazor xss


    【解决方案1】:

    您在 Razor 文件中编写的有关布局的所有内容都将转换为对 RenderTreeBuilder 的调用。这个类有一个public void AddContent(int sequence, MarkupString markupContent) 的方法和另一个public void AddContent(int sequence, object? textContent) 的方法。但是,对于属性,MarkupString 类没有专门的重载。因此,您体验到相同的变量在用作属性时会被编码,但在用作内容时不会被编码。

    作为参考,看看https://github.com/dotnet/aspnetcore/blob/master/src/Components/Components/src/Rendering/RenderTreeBuilder.cs的类

    从那里开始,它会很快进入 Blazor 渲染的内部。我不是这个领域的专家,但我没有找到任何方法来绕过属性值的默认 HTML 编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 2015-01-19
      • 2011-09-27
      • 1970-01-01
      • 2021-12-11
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多