AEM: 403 Запрещается при вызове почтового сервлета

Моя проблема похожа на это: CQ5: 403 Запрещается при вызове сервлета Post, но в AEM 6.1

В соответствии с принятым ответом на вышеуказанную тему, я должен удалить POST из Apache Sling Referrer Filter. Интересно, вредно ли это действие для моей системы? И есть ли лучший способ исправить эту проблему?

p / s: извините за мой английский.

3 ответа

Если вы тестируете свой код в авторском режиме, вы получаете 403 forbidden ошибка по запросу. Для этого требуется токен csrf (введен в AEM 6.1 для проверки POST, PUT а также DELETE запросы от браузера против CSRF-атак). Токен CSRF проверяется при отправке формы на стороне сервера. Каркас защиты CSRF загружается, если granite.jquery зависимость добавлена ​​или вы можете объявить зависимость granite.csrf.standalone использовать рамки. При публикации он должен нормально работать перед входом в систему.

Если вы пытаетесь отправить данные в экземпляр AEM извне AEM, это решение. Его не рекомендуется по соображениям безопасности. Но если это необходимо, вы можете добавить аутентификацию к вашим запросам POST и настроить меры безопасности CSRF. В дополнение к этому вы можете настроить свой диспетчер так, чтобы запрос POST разрешал только выборочные пути и блокировал оставшиеся. Даже следуя этому, это не гарантирует полной безопасности.

Что касается альтернатив, я не уверен, каков ваш вариант использования, но вы могли бы создать форму в AEM и обрабатывать POST через эту форму, и на любом внешнем ресурсе, который вы сейчас пытаетесь отправить POST в AEM, включите эту форму в виде iframe.

Вызов POST необходим для модификации содержимого. До тех пор, пока ваши экземпляры не будут защищены каким-либо дополнительным механизмом обработки запросов перед AEM диспетчерами и серверами Akamai, не будет никакого вреда, где вы можете выполнить фильтр запросов на диспетчере и до этого даже на уровне akamai и разрешить только точные почтовые запросы. для конкретного приложения.

Пример фильтра рассылки:

который показывает, что разрешается только пост-вызов с @SlingServlet(paths = "/bin/sling/myproj/exampleauthhandler")

/filter {
    /0001  { /glob "*" /type "deny" }
    /0999 { /type "allow" /method "POST" /url "/bin/sling/myproj/exampleauthhandler" }
}

Более подробную информацию вы можете найти для диспетчера AEM

https://docs.adobe.com/docs/en/dispatcher/disp-config.html

у нас также есть методы PUT и PATCH, которые также достойны, но не подходят лучше всего для сценариев реального времени.

PATCH:: https://tools.ietf.org/html/rfc5789

также хорошее обсуждение вы можете найти PUT vs PATCH

REST API - PUT vs PATCH с примерами из реальной жизни

Другие вопросы по тегам