1

如果您查看反 XSS 库,它们通常对 HTML 内容和 HTML 属性具有不同的编码。例如使用微软的 WPL 实现

<@ Imports Namespace="Microsoft.Security.Application" %>

<span attribute="<%= AntiXss.HtmlAttributeEncode(attrVariable) %>">
    <%= AntiXss.HtmlEncode(contentVariable) %>
</span>

现在 ASP.Net 添加了编码蜜蜂刺,使这更容易:

<span attribute="<%: attrVariable %>">
    <%: contentVariable %>
</span>

然后,您可以指定要在 web.config 中使用的编码器

<system.web>
    <httpRuntime encoderType="AntiXssEncoder, AssemblyName"/>

这里的编码器知道是调用HtmlAttributeEncode还是HtmlEncode依赖上下文。

我的问题是我有一个实现的智能类IHtmlString- 这告诉<%:语法完全绕过它。但是我仍然想根据上下文进行不同的编码:

<% var item = GetImplementationOfIHtmlString() %>

<span attribute="<%: item %>"> <!-- attribute encodes -->
    <%: item %>                <!-- HTML encodes -->
</span>

有什么方法IHtmlString.ToHtmlString可以了解上下文(HTML 内容的编码或属性内部)?

4

1 回答 1

1

不可以。自定义 HtmlEncode 方法的约定是它们还必须适用于属性编码(当属性值被引号括起来时)。这样 <%: %> 语法不需要上下文感知。

于 2013-01-15T17:04:03.443 回答