Java AEM:403禁止在调用Post servlet时发生

Java AEM:403禁止在调用Post servlet时发生,java,servlets,csrf,aem,Java,Servlets,Csrf,Aem,我的问题与此类似:但在AEM 6.1中 根据上述主题的公认答案,我必须从ApacheSling推荐过滤器中删除帖子。我想知道这个动作是否对我的系统有害? 你有更好的方法来解决这个问题吗 p/s:对不起,我说的是英语。如果您试图从AEM外部将数据发布到AEM实例,这就是解决方案。出于安全原因,不建议这样做。但是,如果必须这样做,您可以在POST请求中添加身份验证,并设置CSRF安全措施。除此之外,您还可以设置调度器,使POST请求只允许选择性路径,并阻止其余路径。即使如此,遵循所有这些也不能保证完

我的问题与此类似:但在AEM 6.1中

根据上述主题的公认答案,我必须从ApacheSling推荐过滤器中删除帖子。我想知道这个动作是否对我的系统有害? 你有更好的方法来解决这个问题吗


p/s:对不起,我说的是英语。

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


对于替代方案,我不确定您的用例是什么,但您可以在AEM中创建一个表单,并通过该表单处理帖子,并且在您当前尝试向AEM发送帖子的任何外部资源上,将此表单作为iframe包含在内

修改内容需要POST调用。除非您的实例不受dispatcher和Akamai服务器在AEM之前提供的更多请求处理机制的保护,否则不会有任何损害,您可以在dispatcher上进行请求筛选,甚至在Akamai级别上也可以进行请求筛选,并且只允许针对特定于应用程序的确切post请求

分派筛选器示例:

显示仅允许使用@SlingServlet(路径=“/bin/sling/myproj/exampleauthhandler”)进行post调用

您可以为AEM dispatcher找到更多信息

我们也有称为PUT和PATCH的方法,这也很有价值,但并不最适合实时场景

补丁::

这也是一个很好的讨论,你可以找到PUT vs PATCH


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

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