Является ли приложение GWT, работающее в Google App Engine, защищенным от CSRF? - PullRequest
3 голосов
/ 05 июня 2010

Я занимаюсь разработкой приложения GWT, работающего на Google App Engine, и задаюсь вопросом, нужно ли мне беспокоиться о подделке межсайтовых запросов или об этом автоматически позаботятся обо мне?

Для каждого запроса RPC, требующего аутентификации, у меня есть следующий код:

public class BookServiceImpl extends RemoteServiceServlet implements
BookService {
    public void deleteInventory(Key<Inventory> inventoryKey) throws NotLoggedInException,  InvalidStateException, NotFoundException {
        DAO dao = new DAO();
            // This will throw NotLoggedInException if user is not logged in
        User user = dao.getCurrentUser();
            // Do deletion here
    }
}

public final class DAO extends DAOBase {
    public User getCurrentUser() throws NotLoggedInException {
            currentUser = UserServiceFactory.getUserService().getCurrentUser();
            if(currentUser == null) {
                throw new NotLoggedInException();
            }
        return currentUser;
    }

Я не смог найти никакой документации о том, как UserService проверяет аутентификацию. Достаточно ли опираться на приведенный выше код или мне нужно больше? Я новичок в этом, но из того, что я понимаю, чтобы избежать CSRF-атак, некоторые стратегии:

  1. добавление токена аутентификации в полезная нагрузка запроса вместо просто проверка куки
  2. проверка HTTP Заголовок реферира

Я вижу, что у меня установлены файлы cookie от Google, которые выглядят как значения SID, но я не могу определить по сериализованным объектам Java в полезной нагрузке, передаются токены или нет. Я также не знаю, используется ли заголовок Referer или нет.

Итак, я беспокоюсь о проблеме? Если нет, то какова лучшая стратегия здесь? Это достаточно распространенная проблема, поэтому должны существовать стандартные решения ...

1 Ответ

6 голосов
/ 05 июня 2010

Если бы вы поместили тот же код в обычный сервлет, вы наверняка были бы уязвимы для XSRF. Но поскольку вы используете GWT RemoteServiceServlet - ответ зависит от версии GWT, которую вы используете.

Начиная с еще не выпущенного GWT 2.1, механизм RPC добавляет заголовки запроса и проверяет наличие этих заголовков в RemoteServiceServlet. Это имеет свои ограничения - в частности, более старые версии flash позволяют отправлять заголовки запросов из другого домена, но это усложняет задачу для потенциального злоумышленника.

Если вы хотите адекватно защитить себя от XSRF, обратитесь к Блог разработчиков Lombardi . В блоге обсуждаются две техники. Первое - это простое изменение: порты 2.1 переходят на более старые версии GWT. Второй подход требует дублирования идентификатора сеанса в качестве параметра запроса и является рекомендуемым способом защиты от XSRF.

Ссылки

  1. GWT RPC - Достаточно ли этого для защиты от CSRF?
  2. Блог разработчиков Lombardi по GWT RPC и XSRF
  3. Безопасность для приложений GWT
...