Google app engine 使用oAuth的GAE端点上的CSRF

Google app engine 使用oAuth的GAE端点上的CSRF,google-app-engine,google-oauth,csrf,google-cloud-endpoints,Google App Engine,Google Oauth,Csrf,Google Cloud Endpoints,我希望在我的API中实现针对CSRF攻击的保护,我使用GAE端点开发了该API,所有方法都需要oAuth2 在实施任何特定保护之前,我正试图破坏我的应用程序(乍一看,CSRF看起来很简单)。但就是不能让它工作 当我在另一个页面中引用我的端点时,浏览器会添加cookie信息,但不会添加带有承载访问令牌的授权标头。这似乎还不够,因为我的端点会自动返回401,并带有www-authenticate:Bearer-realm=”https://accounts.google.com/“标题 正如我所说,

我希望在我的API中实现针对CSRF攻击的保护,我使用GAE端点开发了该API,所有方法都需要oAuth2

在实施任何特定保护之前,我正试图破坏我的应用程序(乍一看,CSRF看起来很简单)。但就是不能让它工作

当我在另一个页面中引用我的端点时,浏览器会添加cookie信息,但不会添加带有承载访问令牌的授权标头。这似乎还不够,因为我的端点会自动返回401,并带有
www-authenticate:Bearer-realm=”https://accounts.google.com/“
标题

正如我所说,我没有针对CSRF的具体保护措施。但是,在HTTPS下使用带有oAuth2的Google云端点是否“免费”为我提供了针对此类攻击的保护

--编辑以发表评论

我尝试了一个简单的CSRF攻击。我得到了一个带有
的页面。然后,当我在另一个选项卡中打开我的应用程序时,我访问了这个页面,这样我的浏览器就会发送我的身份验证信息。它确实发送cookie,但不是我的oAuth令牌)

我甚至没有试过写一篇文章,如果我“黑”一个GET,那就太棒了。

OAUth 2.0通过使用一个不可猜测的状态参数,该参数由客户端生成,并由服务器验证。即使攻击者能够诱使客户端访问URL以授权恶意令牌,状态参数也将与客户端的状态参数不匹配,请求将被拒绝

GoogleCloudEndpoints库为您处理OAuth规范中的这一部分,因此您是清白的

Oauth2要求所有请求都将承载访问令牌作为HTTP头(使用javascript中的XMLhttpRequest设置头并发出请求)或URL查询参数(访问令牌)。攻击者不知道这个秘密值,因此无法创建通过验证的URL。

以下是(我希望)我的web应用程序中有用的java代码片段

package com.kuoll.server.filters;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CrossOriginFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) response;

        resp.addHeader("Access-Control-Allow-Origin", "*");
        resp.setHeader("Access-Control-Allow-Methods", "POST, OPTIONS");
        resp.setHeader("Access-Control-Allow-Headers", "origin, content-type, accept");

        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }

}
中的
*
替换为相应的addHeader(“访问控制允许原点“,“*””)到您的原点(如果需要)

web.xml

<filter-mapping>
    <filter-name>CrossOriginFilter</filter-name>
    <url-pattern>/api/*</url-pattern>
</filter-mapping>

交叉源滤波器
/原料药/*

不确定您是否看到了注释中链接的文章,但(如果我理解正确的话)OAuth2 CSRF不是问题。我可能错了,如果你在其他地方找到任何答案,请分享(;你所说的“当我在另一个页面中引用我的端点时,浏览器会添加cookie信息,但不会使用承载访问令牌添加授权标头”的具体含义是什么?你能显示代码吗?在应用程序引擎中设置过滤器中的标题不起作用…但无论如何,你没有说任何关于CSRF的内容…正如我所说,我正在寻找如何在盲目实施任何修复之前破坏我的应用程序(或证明我实际上已经受到保护)。但是感谢您提供的链接是关于针对OAuth授权服务器的CSRF攻击,但是OAuth2令牌是否可以保护我的应用服务器免受此类攻击?