Регистрация  |  Вход

Security scanner & apex:page action method

Здравсвуйте. В сф есть "замечательное" органичение: нельзя делать 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 и вроде как решение было.
Пойду подниму старые исходники.

Отличную тему поднял. Точно помню сталкивался с этим давно при работе с Security Review и вроде как решение было. 
Пойду подниму старые исходники.

нет, вспомнил, проблема обходилась именно с помощью apex:actionFunction повешенным на onload. Тебе это не подходит.

Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.

:( нет, вспомнил, проблема обходилась именно с помощью apex:actionFunction повешенным на onload. Тебе это не подходит.

Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.

Alex Tsitsura
В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться.

Если честно, то ни разу сканер не ругался на такое. А пакетов я повидал много.

[quote="Alex Tsitsura"]В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться.[/quote]
Если честно, то ни разу сканер не ругался на такое. А пакетов  я повидал много.

Maxim Elets
Alex Tsitsura
В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться.
Если честно, то ни разу сканер не ругался на такое. А пакетов я повидал много.

Возможно, action метод не выполнял dml?

[quote="Maxim Elets"]Alex Tsitsura
В сф есть "замечательное" органичение: нельзя делать dml в конструкторе. Но чтоб обойти, можно логику перенести в apex:page action. По таком сценарию все супер работает, но Security scanner на ето дело ругаеться "cross-site request forgery", впринципе есть на что ругаться.
Если честно, то ни разу сканер не ругался на такое. А пакетов я повидал много.[/quote]

Возможно, action метод не выполнял dml?


Dmitry Shnyrev
Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.

Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(

[quote="Dmitry Shnyrev"]Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.[/quote]

Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(

Alex Tsitsura
стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(

Значит вместо POST запроса GET запрос.
Alex Tsitsura
Еще ни разу не приходилось делать reset веб сервис

Лучше изучи этот вопрос!

[quote="Alex Tsitsura"]стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :([/quote]
Значит вместо POST запроса GET запрос.
[quote="Alex Tsitsura"]Еще ни разу не приходилось делать reset веб сервис[/quote]
Лучше изучи этот вопрос!

Alex Tsitsura
Dmitry Shnyrev
Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.

Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(

Проверил, есть в action DML.

[quote="Alex Tsitsura"][quote="Dmitry Shnyrev"]Так если это сторонний сервис должен заходить, то почему не сделать REST webservice и пусть себе заходит и выполняет нужную DML.[/quote]

Еще ни разу не приходилось делать reset веб сервис, но если я правильно понимаю, то сторонний сервис должен сделать post запрос, но в моем случае, стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :([/quote]

Проверил, есть в action DML. 

Maxim Elets
Alex Tsitsura
Dmitry Shnyrev
Так если это сторонний сервис должен заходить, то почему не сделать 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]  

Возможно сканеры разные

Dmitry Shnyrev
Alex Tsitsura
стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя
Значит вместо POST запроса GET запрос.

Спасибо, буду пробовать

[quote="Dmitry Shnyrev"]Alex Tsitsura
стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
Значит вместо POST запроса GET запрос. [/quote]

Спасибо, буду пробовать

Alex Tsitsura
Dmitry Shnyrev
Alex Tsitsura
стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя
Значит вместо POST запроса GET запрос.

Спасибо, буду пробовать

Возможно я что-то не понимаю, но если делать GET, то все равно а headers нужно положить дополнительную инфу. Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.

[quote="Alex Tsitsura"][quote="Dmitry Shnyrev"]Alex Tsitsura
стороннему сервису можно только url указать, больше ничего с сторонним сервисом делать нельзя :(
Значит вместо POST запроса GET запрос. [/quote]

Спасибо, буду пробовать[/quote]

Возможно я что-то не понимаю, но если делать GET, то все равно а headers нужно положить дополнительную инфу. Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.

Alex Tsitsura
ему нужно авторизоваться

Если сайтовая страница, можно и без авторизации

[quote="Alex Tsitsura"]ему нужно авторизоваться[/quote]

Если сайтовая страница, можно и без авторизации

Alex Tsitsura
Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.

Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.

[quote="Alex Tsitsura"]Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.[/quote]
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.

wilder
Alex Tsitsura
ему нужно авторизоваться

Если сайтовая страница, можно и без авторизации

Спасибо, сделал пока что так:

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;

return 'OK :' + acc.id;
} catch (Exception ex) {
return 'ERR: ' + ex.getMessage();
}
}
}

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 пропустить уже.

[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 пропустить уже.

Dmitry Shnyrev
Alex Tsitsura
Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.

Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.

Проблема в тому, что нужно открытый доступ и выполнять dml(к сожалению на стороннем сервисе нельзя сделать авторизацию).

Все же, решил по изучать api стороннего сервиса, и если есть возможность, то сделаю маленькую одностороннюю синхронизацию, если будет такая возможность.

[quote="Dmitry Shnyrev"][quote="Alex Tsitsura"]Тоесть просто при переходе по силке сторонний сервис не сможет выполнить нужные действия, ему нужно авторизоваться.[/quote]
Ну конечно нужно авторизироваться. А как ты собирался просто обращаться к странице с помощью стороннего сервиса? Если ты тестировал в браузере, то конечно у тебя работало - потому что куки браузерные подхватывались, но если напрямую сервис должен дернуть какой-то функционал, то как без авторизации быть? Если ты сделаешь открытый доступ к функционалу, тем более с DML жди проблем с безопасностью.[/quote]

Проблема в тому, что нужно открытый доступ и выполнять dml(к сожалению на стороннем сервисе нельзя сделать авторизацию). 

Все же, решил по изучать api стороннего сервиса, и если есть возможность, то сделаю маленькую одностороннюю синхронизацию, если будет такая возможность.

Alex Tsitsura
Работает

Отлично все сделал! Именно так и должно работать!

[quote="Alex Tsitsura"]Работает [/quote]
Отлично все сделал! Именно так и должно работать!

Dmitry Shnyrev
Alex Tsitsura
Работает

Отлично все сделал! Именно так и должно работать!

По сути то да, но уязвимость осталась, надеюсь сканер не настолько умен, чтоб ее обнаружить.

[quote="Dmitry Shnyrev"][quote="Alex Tsitsura"]Работает [/quote]
Отлично все сделал! Именно так и должно работать![/quote]

По сути то да, но уязвимость осталась, надеюсь сканер не настолько умен, чтоб ее обнаружить.