【发布时间】:2014-02-26 23:59:20
【问题描述】:
我试图为我的应用程序实现 XSRF。我按照gwtproject.org 提供的指南进行操作。我什至设置了一个演示,它工作正常。如指南中所述,我用另一个异步调用结束了异步调用以获取 XSRF 令牌,一切正常。
XsrfTokenServiceAsync xsrf = (XsrfTokenServiceAsync)GWT.create(XsrfTokenService.class);
((ServiceDefTarget)xsrf).setServiceEntryPoint(GWT.getModuleBaseURL() + "xsrf");
xsrf.getNewXsrfToken(new AsyncCallback<XsrfToken>() {
public void onSuccess(XsrfToken token) {
MyServiceAsync rpc = (MyServiceAsync)GWT.create(MyService.class);
((HasRpcToken) rpc).setRpcToken(token);
// make XSRF protected RPC call
rpc.doStuff(new AsyncCallback<Void>() {
// ...
});
}
public void onFailure(Throwable caught) {
try {
throw caught;
} catch (RpcTokenException e) {
// Can be thrown for several reasons:
// - duplicate session cookie, which may be a sign of a cookie
// overwrite attack
// - XSRF token cannot be generated because session cookie isn't
// present
} catch (Throwable e) {
// unexpected
}
});
我的问题:我是否应该为每个异步调用进行两次异步调用是 XSRF 安全的,即一个获取 XSRF 令牌和其他实际异步调用?他们是一种让 XSRF 令牌在每个浏览器会话中使用它的方法吗?我问这个的原因是,我们的已经是一个完全编码的应用程序,如果是以前的情况,我必须编辑每个异步调用并使其 XSRF 安全,更不用说,性能将是一个问题,因为我有每次进行 2 次异步调用。
【问题讨论】: