当前位置:  开发笔记 > 编程语言 > 正文

是否在Google App Engine上运行的GWT应用程序受CSRF保护

如何解决《是否在GoogleAppEngine上运行的GWT应用程序受CSRF保护》经验,为你挑选了1个好方法。

我正在开发一个在Google App Engine上运行的GWT应用程序,想知道我是否需要担心跨站点请求伪造或者是否会自动为我处理?

对于每个需要身份验证的RPC请求,我都有以下代码:

public class BookServiceImpl extends RemoteServiceServlet implements
BookService {
    public void deleteInventory(Key inventoryKey) throws NotLoggedInException,  InvalidStateException, NotFoundException {
        DAO dao = new DAO();
            // This will throw NotLoggedInException if user is not logged in
        User user = dao.getCurrentUser();
            // Do deletion here
    }
}

public final class DAO extends DAOBase {
    public User getCurrentUser() throws NotLoggedInException {
            currentUser = UserServiceFactory.getUserService().getCurrentUser();
            if(currentUser == null) {
                throw new NotLoggedInException();
            }
        return currentUser;
    }

我找不到任何关于UserService检查身份验证的文档.是否足以依赖上面的代码或我需要更多?我是初学者,但据我所知,为了避免CSRF攻击,一些策略是:

    在请求有效负载中添加身份验证令牌,而不仅仅是检查cookie

    检查HTTP Referer标头

我可以看到我从谷歌设置的cookie看起来像SID值,但我无法从有效载荷中的序列化Java对象中判断出是否传递了令牌.我也不知道是否正在使用Referer标头.

那么,我担心一个非问题吗?如果没有,这里最好的策略是什么?这是一个很常见的问题,那里必须有标准的解决方案......



1> Sripathi Kri..:

如果您将相同的代码放在常规servlet中,那么您肯定容易受到XSRF的攻击.但是因为你正在使用GWT RemoteServiceServlet- 答案取决于你正在使用的GWT的版本.

从尚未发布的GWT 2.1开始,RPC机制添加请求标头并验证RemoteServiceServlet中是否存在这些标头.这有其局限性 - 特别是旧版本的Flash允许您从不同的域发送请求标头,但它确实使潜在的攻击者更加困难.

如果您想充分保护自己免受XSRF的侵害,请参阅Lombardi的开发博客.该博客讨论了两种技术.第一个是端口2.1更改为旧版GWT的简单更改.第二种方法要求将会话标识符复制为请求参数,并且是防止XSRF的推荐方法.

参考

    GWT RPC - 它是否足以抵御CSRF?

    关于GWT RPC和XSRF的Lombardi开发博客

    GWT应用程序的安全性

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有