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