アンチ XSS ライブラリを見ると、通常、HTML コンテンツと HTML 属性のエンコーディングが異なります。たとえば、Microsoft の 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 コンテンツのエンコードまたは属性内) を認識する方法はありますか?