1

私はnode.jsとexpressを使用して単純なサーバーを構築しています.CSRFはexpressフレームワークを介して実装されています。

app.use(express.csrf()); 
app.use(function(req, res, next){
  res.locals.token = req.session._csrf;
  res.locals.year = new Date().getFullYear();
  next();
});

Connect CSRF ミドルウェアは req.session._csrf トークンを自動的に生成し、この関数はそれを res.locals.token にマップして、ejs から作成されたテンプレートで使用できるようにします。これは Web アプリケーションでうまく機能します。

しかし、Android から作成されたモバイル アプリケーションの場合、たとえばログインする場合、CSRF トークンなしでユーザー名とパスワードのみを送信すると、サーバーは要求を拒否します。

前のコードは Web テンプレートに対してのみ機能するため、私の質問は、Android 対応アプリケーションでこのトークンを受け取る方法です

最高のRGDS XI

4

1 に答える 1

2

保護する必要があるのがログイン ページのみである場合は、最初にログイン ページに対して GET を実行し (JSON または XML を返す)、CSRF トークンをその方法で簡単に取得できます。

ただし、CSRF はモバイル デバイスの問題ではないと思います。代わりにできることは、cookiesession ミドルウェアを使用してセッションにフラグを設定し、このタイプのクライアントが CSRF を必要としないことを示すことです。

次に、この回答Disable csrf validation for some requests on Expressを使用して、そのフラグが Cookie に存在するかどうかに応じて CSRF をオンまたはオフにします。

あるいは、CSRF を必要としないことを示す Cookie アプローチを使用する代わりに、モバイル アプリですべてのリクエスト URL にフラグを追加することもできます。ただし、これは、ハッカーがこのフラグを知っていれば、CSRF 保護をバイパスできることを意味します。

于 2013-07-17T07:34:29.517 に答える