Здравсвуйте. В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться. Рекомендуют сделать custom button, что я думаю наиболее правилний вариант, но логика сделана таким образом, что вариант с кнопкой отпадает. Еще пробовал вариант с js(почепить нужний метод на onload), но снова проблема, получаеться что на страницу(сайт) должен заходить стороний сервис(как гость). Но когда стороний сервис переходит по силке, js не исполняеться. Пробовал даже вариан с get методом, создать какую нить переменую, и в гетере запустить мой метод, но в таком случае дание походу не комитяться в базу(после инсерта ид есть, никакиз ексепшенов, но дата в базе не появляеться) - не успел разобраться
Если ли у Вас какието идеи, как можно обойти сканера? (Еще думаю поизучать api, и написать sync, но хотелось более бистрий по реализации вариант).
Здравсвуйте. В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться. Рекомендуют сделать custom button, что я думаю наиболее правилний вариант, но логика сделана таким образом, что вариант с кнопкой отпадает. Еще пробовал вариант с js(почепить нужний метод на onload), но снова проблема, получаеться что на страницу(сайт) должен заходить стороний сервис(как гость). Но когда стороний сервис переходит по силке, js не исполняеться. Пробовал даже вариан с get методом, создать какую нить переменую, и в гетере запустить мой метод, но в таком случае дание походу не комитяться в базу(после инсерта ид есть, никакиз ексепшенов, но дата в базе не появляеться) - не успел разобраться :(
Если ли у Вас какието идеи, как можно обойти сканера? (Еще думаю поизучать api, и написать sync, но хотелось более бистрий по реализации вариант).
Отличную тему поднял. Точно помню сталкивался с этим давно при работе с Security Review и вроде как решение было. Пойду подниму старые исходники.
:( нет, вспомнил, проблема обходилась именно с помощью apex:actionFunction повешенным на onload. Тебе это не подходит.
Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.
Если честно, то ни разу сканер не ругался на такое. А пакетов я повидал много.
[quote="Alex Tsitsura"]В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться.[/quote]
Если честно, то ни разу сканер не ругался на такое. А пакетов я повидал много.
[quote="Maxim Elets"]Alex Tsitsura
В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться.
Если честно, то ни разу сканер не ругался на такое. А пакетов я повидал много.[/quote]
Возможно, action метод не выполнял dml?
Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
[quote="Dmitry Shnyrev"]Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.[/quote]
Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
[quote="Alex Tsitsura"]стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :([/quote]
Значит вместо POST запроса GET запрос.
[quote="Alex Tsitsura"]Еще ни разу не приходилось делать reset веб сервис[/quote]
Лучше изучи этот вопрос!
[quote="Alex Tsitsura"][quote="Dmitry Shnyrev"]Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.[/quote]
Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :([/quote]
Проверил, есть в action DML.
Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.
Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
Проверил, есть в action DML.
хм.. странно, я думал(и думаю), что трабла именно потому, что я dml юзаю, вот например у когото похожые проблемы были: Cross-Site Request Forgery (CSRF) CWE
[quote="Maxim Elets"][quote="Alex Tsitsura"][quote="Dmitry Shnyrev"]Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.[/quote]
Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :([/quote]
Проверил, есть в action DML.[/quote]
хм.. странно, я думал(и думаю), что трабла именно потому, что я dml юзаю, вот например у когото похожые проблемы были: [url=http://salesforce.stackexchange.com/questions/10923/cross-site-request-forgery-csrf-cwe]Cross-Site Request Forgery (CSRF) CWE[/url]
Возможно сканеры разные
Alex Tsitsura стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя Значит вместо POST запроса GET запрос.
[quote="Dmitry Shnyrev"]Alex Tsitsura
стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
Значит вместо POST запроса GET запрос. [/quote]
Спасибо, буду пробовать
Alex Tsitsura стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя Значит вместо POST запроса GET запрос.
Спасибо, буду пробовать
Возможно я что-то не понимаю, но если делать GET, то все равно а headers нужно положить дополнительную инфу. Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.
[quote="Alex Tsitsura"][quote="Dmitry Shnyrev"]Alex Tsitsura
стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
Значит вместо POST запроса GET запрос. [/quote]
Спасибо, буду пробовать[/quote]
Возможно я что-то не понимаю, но если делать GET, то все равно а headers нужно положить дополнительную инфу. Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.
[quote="Alex Tsitsura"]ему нужно авторизоваться[/quote]
Если сайтовая страница, можно и без авторизации
Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.
[quote="Alex Tsitsura"]Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.[/quote]
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.
ему нужно авторизоваться
Если сайтовая страница, можно и без авторизации
Спасибо, сделал пока что так:
1. Создал Apex Class
// просто пример, оооочень упрощена версия боевого кода @RestResource(urlMapping='/myservice') global class MyService { @HttpGet global static String doGet() { try { String acctName = RestContext.request.params.get('name'); Account acc = new Account(name = acctName); insert acc;
[quote="wilder"][quote="Alex Tsitsura"]ему нужно авторизоваться[/quote]
Если сайтовая страница, можно и без авторизации[/quote]
Спасибо, сделал пока что так:
1. Создал Apex Class
[code]
// просто пример, оооочень упрощена версия боевого кода
@RestResource(urlMapping='/myservice')
global class MyService {
@HttpGet
global static String doGet() {
try {
String acctName = RestContext.request.params.get('name');
Account acc = new Account(name = acctName);
insert acc;
return 'OK :' + acc.id;
} catch (Exception ex) {
return 'ERR: ' + ex.getMessage();
}
}
}
[/code]
2. Добавил MyService в Enabled Apex Classes в Site’s Public Access Settings
3. Решил опробовать: {Site_URL}/services/apexrest/myservice?name=test, но завтыкал, забыл о пекедже
4. {Site_URL}/services/apexrest/{package}/myservice?name=test
Работает ;)
Думаю, что этот временный фикс security scanner пропустить уже.
Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.
Проблема в тому, что нужно открытый доступ и выполнять dml(к сожалению на стороннем сервисе нельзя сделать авторизацию).
Все же, решил по изучать api стороннего сервиса, и если есть возможность, то сделаю маленькую одностороннюю синхронизацию, если будет такая возможность.
[quote="Dmitry Shnyrev"][quote="Alex Tsitsura"]Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.[/quote]
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.[/quote]
Проблема в тому, что нужно открытый доступ и выполнять dml(к сожалению на стороннем сервисе нельзя сделать авторизацию).
Все же, решил по изучать api стороннего сервиса, и если есть возможность, то сделаю маленькую одностороннюю синхронизацию, если будет такая возможность.
[quote="Dmitry Shnyrev"][quote="Alex Tsitsura"]Работает [/quote]
Отлично все сделал! Именно так и должно работать![/quote]
По сути то да, но уязвимость осталась, надеюсь сканер не настолько умен, чтоб ее обнаружить.