Techioz Blog

CORS 対応サーバーがリクエストを拒否しない

概要

resitfy サーバーで Express Cors を使用しようとしていますが、他の IP からのリクエストを拒否していないようです。私はローカルで作業しているので、起点をランダムなパブリックIPに設定しようとしましたが、すべてのリクエストはまだ通過しています

私のルートは次のとおりです。

module.exports = function(app) {
    var user = require('./controllers/userController');
    var cors = require('cors');
    var corsOptions = require('./cors.json');


    app.post('/auth/signup', cors(corsOptions),user.createUser);
    app.post('/auth/login', cors(corsOptions), user.validateUser);
    app.post('/auth/generateKeys', cors(corsOptions), user.generateKeys);
    app.post('/auth/generateToken', user.generateToken);
};

そして、これがランダムな IP を設定した cors.json ファイルです。

{
    "origin": "http://172.16.12.123",
    "optionsSuccessStatus": 200,
}

ルートに cors を設定すると、postman で次のように表示されますが、リクエストはまだ通過していますか?アクセス拒否の応答が返されると思います。

解決策

CORS 構成だけでは、サーバーがリクエストを拒否することはありません。 CORS 構成だけを介してサーバー側でリクエストをブロックすることはできません。

CORS サポートを構成するときにサーバーが行う唯一の違いは、Access-Control-Allow-Origin 応答ヘッダーとその他の CORS 応答ヘッダーを送信することだけです。それでおしまい。

クロスオリジン制限の実際の適用は、サーバーではなくブラウザによってのみ行われます。

したがって、サーバーに対してどのようなサーバー側 CORS 構成を行っても、サーバーは引き続きすべてのクライアントおよびオリジンからのリクエストを受け入れ続けます。言い換えれば、すべてのオリジンのすべてのクライアントは、通常と同じようにサーバーから応答を受け取り続けます。

ただし、ブラウザーは、リクエストの送信先サーバーが、それを許可する Access-Control-Allow-Origin ヘッダーで応答してリクエストを許可することをオプトインしている場合にのみ、クロスオリジン リクエストからの応答を特定のオリジンで実行されているフロントエンド JavaScript コードに公開します。起源。

CORS 構成を使用して実行できるのはこれだけです。サーバー側の CORS 構成を行うだけでは、サーバーが特定の送信元からのリクエストのみを受け入れて応答するようにすることはできません。これを行うには、CORS 構成以外のものを使用する必要があります。