Как не преобразовывать спецсимволы в html-сущности с помощью антиспама owasp - PullRequest
3 голосов
/ 14 июля 2010

Я использую Owasp Anti samy с файлом политики Ebay для предотвращения XSS-атак на мой сайт.

Я также использую поиск Hibernate для индексации своих объектов.

Когда я использую этот код:

String html = "special word: été";    

// use the Ebay configuration file    
Policy policy = Policy.getInstance(xssPolicyFile.getInputStream());

AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(html, policy);

// result is now : "special word: été"
result = cr.getCleanHTML();

Как вы можете видеть, все символы "é" преобразованы в их html-эквивалент "é"

Моя страница на UTF-8, поэтому мне не нужно это преобразование. Более того, когда я индексирую этот текст с помощью Hibernate Search, он индексирует слово с помощью html-сущностей, поэтому я не могу найти слово «été» в моем индексе.

Как я могу заставить антисемию не преобразовывать специальные символы в их эквивалент сущности html?

спасибо

PS: проблема открыта: http://code.google.com/p/owaspantisamy/issues/detail?id=99

Ответы [ 4 ]

2 голосов
/ 22 сентября 2011

Как сказал Мохамад в комментарии, Антисамия только что выпустила новую директиву под названием entityEncodeIntlChars

вот деталь: http://code.google.com/p/owaspantisamy/source/detail?r=240

Кажется, эта директива решает проблему.

2 голосов
/ 29 октября 2010

Сегодня утром я столкнулся с той же проблемой.

Я инкапсулировал антисемию в классе и использую apache StringEscapeUtil из apache common-lang для восстановления специальных символов.

 CleanResults cleanResults = antiSamy.scan(taintedHtml);
 cleanedHtml = cleanResults.getCleanHTML();  
 return StringEscapeUtils.unescapeHtml(cleanedHtml)

Результатом является очищенный HTML без экранирования специальных символов HTML.

Надеюсь, это поможет.

0 голосов
/ 26 августа 2010

Проверьте это: http://code.google.com/p/owaspantisamy/source/browse/#svn/trunk/dotNet/current/source/owaspantisamy/html/scan

Возьмите источник и обратите внимание, что ключевые классы (AntiSamyDOMScanner, CleanResults) используют стандартные объекты каркаса (например, XmlDocument).Скомпилируйте и запустите скомпилированный вами двоичный файл, чтобы вы могли видеть все в отладчике, например, какой из основных классов на самом деле портит ваши данные.Имея это в виду, вы сможете либо изменить несколько свойств основных объектов, чтобы он остановился, либо добавить собственную постобработку, чтобы отменить неправильное действие (скажем, с помощью регулярного выражения).Позже вы можете представить это как дополнительное свойство верхнего уровня, скажем, одно с именем NoMess: -)

Скорее всего, поведение в этом отношении разное в разных языках (в этом стволе 3), но та же тактика работать не будетнезависимо от того, с кем вам приходится иметь дело.

0 голосов
/ 23 августа 2010

После изучения исходного кода AntiSamy я не нашел способа изменить это поведение, кроме изменения AntiSamy.

...