在CQ5中使用XSS api的charset问题,Ã显示为Ã

时间:2014-11-14 07:32:25

标签: character-encoding xss cq5 diacritics aem

我正在使用com.adobe.granite.xss来编码JSP中的字符串。它似乎适用于大多数角色,除了Ã。 Ã显示为Ã。。

使用xssAPI.encodeForHTML()方法时会发生这种情况。我已尝试使用<cq:text> escapeXml="true"并且它具有相同的行为。

字符存储在存储库中,我还在JSP中设置了content =“text / html; charset = utf-8”。

有没有办法对XSS的输入进行编码或过滤,而不会在这种情况下破坏字符集。

我尝试过不同的非拉丁字符,其中大多数都不受XSS api的影响。

enter image description here

1 个答案:

答案 0 :(得分:2)

看起来这是在CQ的XSSAPI中使用的owasp-esapi-java的问题,因为它使用charAt()方法迭代字符串。但是Ã是在BMP之外,正确的迭代方式是:

final int length = s.length();
for (int offset = 0; offset < length; ) {
   final int codepoint = s.codePointAt(offset);

   // do something with the codepoint

   offset += Character.charCount(codepoint);
}

(表格How can I iterate through the unicode codepoints of a Java String?

所以我认为这是这个库的一个问题。

尝试使用xssAPI.filterHTML(),可能它可以解决您的问题。