4

CORS 対応の Restify サービスに対して HTTP GET を実行するたびに、access-control-allow-origin ヘッダーがデフォルトでワイルドカードに設定されていることがわかります。OWASPごとのベスト プラクティスであるため、送信する Origin をエコーすることをお勧めします。どうすればそれを行うことができるかについての推奨事項はありますか? API ドキュメントにあるデフォルトのヘッダー、フォーマッターなどを試しましたが、うまくいきませんでした。

これが私がすることです:

    var server = restify.createServer({
        name: 'People Data Service',
        version: '1.0.6'
    });        
        server.pre(wrapper(restify.pre.pause()));
        // Cleans up sloppy paths
        server.pre(wrapper(restify.pre.sanitizePath()));
        server.use(wrapper(restify.acceptParser(server.acceptable)));
        server.use(wrapper(restify.authorizationParser()));
        server.use(wrapper(restify.queryParser()));
        server.use(wrapper(restify.bodyParser()));
        server.use(wrapper(restify.CORS()));
    //    server.use(wrapper(restify.fullResponse()));

        // Needed this for OPTIONS preflight request: https://github.com/mcavage/node-restify/issues/284
        function unknownMethodHandler(req, res) {
            if (req.method.toUpperCase() === 'OPTIONS') {
                console.log('Received an options method request from: ' + req.headers.origin);
                var allowHeaders = ['Accept', 'Accept-Version', 'Content-Type', 'Api-Version', 'Origin', 'X-Requested-With', 'Authorization'];

                if (res.methods.indexOf('OPTIONS') === -1) {
                    res.methods.push('OPTIONS');
                }

                res.header('Access-Control-Allow-Credentials', false);
                res.header('Access-Control-Expose-Headers', true);
                res.header('Access-Control-Allow-Headers', allowHeaders.join(', '));
                res.header('Access-Control-Allow-Methods', res.methods.join(', '));
                res.header('Access-Control-Allow-Origin', req.headers.origin);
                res.header('Access-Control-Max-Age', 1209600);

                return res.send(204);
            }
            else {
                return res.send(new restify.MethodNotAllowedError());
            }
        }
    server.on('MethodNotAllowed', wrapper(unknownMethodHandler));
4

3 に答える 3

0

私は自分の restify ベースアプリで次のようにします:

    //setup cors
    restify.CORS.ALLOW_HEADERS.push('accept');
    restify.CORS.ALLOW_HEADERS.push('sid');
    restify.CORS.ALLOW_HEADERS.push('lang');
    restify.CORS.ALLOW_HEADERS.push('origin');
    restify.CORS.ALLOW_HEADERS.push('withcredentials');
    restify.CORS.ALLOW_HEADERS.push('x-requested-with');
    server.use(restify.CORS());

restify.CORS.ALLOW_HEADERS.push メソッドを使用して、必要なヘッダーを最初に restify にプッシュし、次に CORS ミドルウェアを使用して CORS 関数を起動する必要があります。

于 2013-09-26T21:49:32.363 に答える
0

次のように、Restify の cors.js ファイルに簡単な変更を加えることで、これを行う方法を見つけました。

Index: node_modules/restify/lib/plugins/cors.js
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- node_modules/restify/lib/plugins/cors.js    (revision )
+++ node_modules/restify/lib/plugins/cors.js    (revision )
@@ -102,6 +102,7 @@
                                 res.setHeader(AC_ALLOW_ORIGIN, origin);
                                 res.setHeader(AC_ALLOW_CREDS, 'true');
                         } else {
+                            origin = req.headers['origin'];
                                 res.setHeader(AC_ALLOW_ORIGIN, origin);
                         }

これにより、資格情報が false に設定されている場合でも、オリジンが応答ヘッダーに追加されます。また、オリジンをホワイトリストに登録する場合は、これを構成に追加するだけです。

server.use(restify.CORS({'origins': ['http://localhost', 'https://domain.my.com', 'https://anotherDomain.my.com']}));
于 2013-10-02T19:19:31.537 に答える
0

それは本当に簡単です。

サーバーをセットアップする前に、サーバーを初期化する必要があります。

var server = restify.createServer( ... );

CORS を構成するには、次の手順に従います。

1. ALLOW_HEADERS を指定する必要があります

これは、CORS リクエストが到着したかどうかを設定するために使用されるヘッダーの配列です。

2. CORS プラグインの設定

server.use(restify.CORS({資格情報: true }));

オプション「credentials」は、restif-CORS-plugin によって Access-Control-Allow-Credentials と Access-Control-Allow-Origin を追加するために使用されます。

クライアント側では、xhr-transport で withCredentials = true を使用することが重要です。

これらの回答がお役に立てば幸いです。

...コードを書いて楽しんでください!

于 2015-11-23T21:34:38.187 に答える