我正在开发一个在 Google App Engine 上运行的 GWT 应用程序,并且想知道我是否需要担心跨站点请求伪造或者是否会自动为我处理?
对于每个需要身份验证的 RPC 请求,我都有以下代码:
public class BookServiceImpl extends RemoteServiceServlet implements
BookService {
public void deleteInventory(Key<Inventory> 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 标头
我可以看到我从 Google 设置了带有 SID 值的 cookie,但是我无法从有效负载中的序列化 Java 对象中判断是否传递了令牌。我也不知道是否使用了Referer 标头。
那么,我是否担心没有问题?如果不是,这里最好的策略是什么?这是一个足够普遍的问题,必须有标准的解决方案......