我正在使用com.adobe.granite.xss
来编码JSP中的字符串。它似乎适用于大多数角色,除了Ã。 Ã显示为Ã。。
使用xssAPI.encodeForHTML()
方法时会发生这种情况。我已尝试使用<cq:text>
escapeXml="true"
并且它具有相同的行为。
字符存储在存储库中,我还在JSP中设置了content =“text / html; charset = utf-8”。
有没有办法对XSS的输入进行编码或过滤,而不会在这种情况下破坏字符集。
我尝试过不同的非拉丁字符,其中大多数都不受XSS api的影响。
答案 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(),可能它可以解决您的问题。