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