AEM:403 Forbidden在调用Post servlet时发生

时间:2016-08-29 07:51:37

标签: java servlets csrf aem

我的问题与此类似:CQ5: 403 Forbidden occurs when call a Post servlet但在AEM 6.1中

根据上述主题的接受答案,我必须从Apache Sling Referrer Filter中删除POST。我想知道这个动作是否对我的系统有害? 并且有更好的方法来解决这个问题吗?

p / s:抱歉我的英文。

3 个答案:

答案 0 :(得分:3)

如果您在作者模式下测试代码,则请求会出现403 forbidden错误。这需要csrf令牌(在AEM 6.1中引入,以针对CSRF attacks执行来自浏览器的POSTPUTDELETE请求的检查。在服务器端的表单提交上验证CSRF令牌。如果添加了granite.jquery依赖项,则会加载CSRF保护框架,或者您可以声明依赖项granite.csrf.standalone以使用该框架。在发布时,它应该在登录前正常工作。

答案 1 :(得分:0)

如果您尝试从AEM外部向AEM实例发布数据,那就是解决方案。出于安全原因,不建议使用它。但如果必须,您可以在POST请求中添加身份验证并设置CSRF安全措施。除此之外,您可以设置调度程序以仅允许POST请求到选择性路径并阻止其余路径。即使这样,所有这些并不能保证完全的安全性。

对于替代方案,我不确定您的用例是什么,但您可以在AEM中创建表单并通过该表单以及您尝试将当前发送到AEM的任何外部资源处理POST,包括此表单作为iframe中。

答案 2 :(得分:0)

修改内容需要POST调用。除非您的实例不受调度员和Akamai服务器在AEM前面的更多请求处理机制的保护,否则将无任何伤害,您可以在调度员处进行请求过滤,在此之前甚至在akamai级别并且仅允许确切的发布请求特定于应用程序。

调度过滤器示例:

显示只允许使用@SlingServlet的post调用(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与PATCH

REST API - PUT vs PATCH with real life examples