Я ищу способ выполнения кода Apex с помощью пользовательской кнопки, добавленной к объекту Opportunity, таким образом, чтобы защитить пользователя от CSRF.
Текущий подход исходит из вопроса Пользовательская кнопка или ссылка на страницу Visualforce с пользовательским контроллером. По существу:
Проблема с этим подходом заключается в том, что вторая пользовательская страница Visualforce извлекается через HTTP GET, извлекает параметры из строки запроса и выполняет операции обновления/вставки DML без защиты CSRF. Это обнаруживается сканером исходного кода безопасности Force.com.
Я должен добавить, что этот апекс-код развертывается как управляемый, так и неуправляемый пакет, поэтому требуется дополнительная работа по перенаправлению на целевую страницу Visualforce с использованием PageReference. Это гарантирует, что при необходимости будет добавлен префикс пространства имен.
Как избежать проблемы с CSRF?
Я не хочу добавлять форму на вторую страницу visualforce с кнопкой, которую они должны нажать, чтобы начать процесс (и, следовательно, получить защиту ViewStateCSRF в постбэке). С точки зрения пользователей, они уже нажали кнопку для выполнения операции.
Я уже задавал этот вопрос на форуме разработчиков, но не нашел решения - Подделка межсайтовых запросов (CSRF/XSRF), безопасное действие пользовательской кнопки
Возможно, мне стоит попробовать переместить код из контроллера для второй страницы визуальной силы и вместо этого использовать расширение для контроллера стенда?
Я мог бы переключиться на обратный вызов Javascript для веб-службы Apex (как предложено в Вызов метода apex с помощью пользовательской кнопкии Как вызвать метод APEX с помощью пользовательской кнопки), но это кажется немного запутанным, и я не уверен, что просто открою еще один ряд проблем безопасности с веб-службой.