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 ヘッダーの確認
SID 値のように見える Google からの Cookie が設定されていることはわかりますが、ペイロード内のシリアル化された Java オブジェクトからは、トークンが渡されているかどうかを判断できません。また、Referer ヘッダーが使用されているかどうかもわかりません。
それで、私は問題がないことを心配していますか?そうでない場合、ここでの最善の戦略は何ですか? これは十分に一般的な問題であり、標準的な解決策が存在する必要があります...