如果您查看反 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 内容的编码或属性内部)?