Привет.
Подскажите с решением.
Есть пакет и там есть много мест где надо вывести html полученный из бэкенда.
Делается это просто <apex:outputText value="htmlStrig" escape="false" />
Теперь стоит вопрос чтобы пройти security code review. Первые попытки провалились и со стороны Salesforce прозвучала настоятельная просьба убрать все escape=false из пакета.
Как можно решить проблему с выводом html?
У кого есть какие решения из практики.
Пока вижу что можно выводить простым apex:outputText (естественно отрендерится как простой текст), а потом пройтись JS по таким элементам и заменить их на html. Что-то типо
jQuery('.htmlEl').each(function(){
jQuery(this).html(jQuery(this).text());
});Ну и чтобы себя обезопасить найти какой-нибудь Sanitizer и пропускать через него
jQuery(this).html(Sanitize(jQuery(this).text()));
Как вы решали подобные проблемы на Security Review?
Да, действительно, по всем пакетам есть escape="false".
Я даже хз, может при ревью правила изменились. А может escape="false" добавили после первого ревью)
Закодировать на сервере в base64 и положить в outputtext, на клиенте раскодировать назад джаваскриптом.
Кстати, у кого есть опыт, как вообще проходят доработки пакета, который уже прошел security review?
Т.е. возможна такая ситуация, что я сделаю для первого раза все скромненько, а потом в рамках небольших доработок зафигачу весь злой функционал?
Кстати, совсем забыл
http://security.force.com/security/tools/forcecom/scanner
Да знаю я про него
Кстати тоже интересный момент
The organization must contain less than 500,000 lines of code (excluding static resources and packages which are not scanned)
В нашем пакете уже больше
поэтому платим денежки
Кстати товарищи из SF посоветовали еще один экзотический способ как вывести информацию в виде html.
есть такой замечательный тег
<apex:inputTextarea richText="true" />
Кстати товарищи из SF посоветовали еще один экзотический способ как вывести информацию в виде html.
есть такой замечательный тег<apex:inputTextarea richText="true" />
Так вот он вставляет на страницу CkEditor и рендерит ваш html внутри себя, но рендерит хитро - убирая все лишнее (по ходу имеет внутри встроенный sanitizer). Посоветовали вставить его на страницу, а как он построится с помощью js выбрать контент из области редактирования или с помощью css спрятать все лишнее кроме области с нашим контентом. Интересное решение, и вроде как приемлемое для товарищей из SF.
! Товарищи просьба. Если отвечаете на предыдущее сообщение, просто сразу пишите ответ без цитаты. Очень не интересно видеть весь вопрос на страницу в виде цитаты и одно-два слова в ответе.
! Кто не знал, а еще и забыл. Можно выделить кусок текста в сообщении и нажать цитировать и в цитату попадет только этот выделенный текст.
Как вы решали подобные проблемы на Security Review?
<apex:outputText value="{!html}" escape="{!escape}"/>...
public Boolean escape
{
get
{
return System.today() > someDay;//where someDay - это дата в будущем до которой точно произойдёт ревью![]()
}
}
...
Т.е. на код ревью это будет false, а уже после Часа Ч будет True?
Идея интересная, но я думаю врядли рабочая. Мне кажется товарищи из SF реагируют не на то что стоит в значении escape, а на сам факт его наличия.
Т.е. на код ревью это будет false, а уже после Часа Ч будет True?
Идея интересная, но я думаю врядли рабочая. Мне кажется товарищи из SF реагируют не на то что стоит в значении escape, а на сам факт его наличия.
Я сильно сомневаюсь в том что они реагируют на факт его наличия, потому что не так давно (пару лет назад) поведение outputText поменялось - в предыдущих версиях по-умолчанию было поведение escape=false, а сейчас escape=true. Так что сам факт наличия этого аттрибута ничего не означает.
(предположение) Ну я просто ставлю себя на место security reviewers. Как можно проанализировать пакеты по 500000 строк кода, да при том что это дело еще идет на потоке. Я сам лично в одном пакете с которым сейчас работаю еще за пару месяцев не разобрался. Поэтому логично предположить что у них поиск уязвимых месте производится автоматически. И я далек от мысли что они трассируют приложение а не тупо натравливают сканер на исходники в поисках "escape"