2013-04-02 3 views
8

私たちは、そのWebサイトを提供する1つのhtmlサイトと1つのnode.jsサーバーを持っています。 ウェブサイトとサーバーは、socke.ioを使用してデータを交換します。 我々は、マニュアルでこれを見つけた:1つのURLへの接続を制限するsocket.ioの起源を設定する方法

起源のデフォルトを*:* Socket.IOサーバへの接続を許可されているの起源に。

私たちのhtml.siteはhttp://questionexample.com/page1です。 このサイトのみが当社のサーバーに接続することができます(ただし、誰もがそのウェブサイトに接続する可能性があります)。 どのようにして起源を設定する必要がありますか?

答えて

-1

私はio.set('origins', http://questionexample.com/page1)はそれを

+0

あなたの答えはthxですが、これは私たちのためには機能しません。次のような警告が表示されます:ウェブサイトを読み込んで接続していないとき_ _不正なorigin_です。 –

+0

あなたは何を唱えようとしていますか?私は起源がクライアントのIPであると思います。セキュリティのために、あなたが提案した原点の制限は、URLが簡単に変更される可能性があるため、どちらも機能していません。クライアントの[認証](https://github.com/LearnBoost/socket.io/wiki/Authorizing)を見たい場合があります。 – csicar

+1

ポート番号も必要です –

8

を行う必要があり、私は同様の問題があったと思います。 運用モードで実行ノードを試してくださいNODE_ENV=production node app.js。それは単に動作しないことができるように開発モードで

io.configure('production', function(){ 
    console.log("Server in production mode"); 
    io.enable('browser client minification'); // send minified client 
    io.enable('browser client etag'); // apply etag caching logic based on version number 
    io.enable('browser client gzip'); // the file 
    io.set('log level', 1);   // logging 
    io.set('transports', [   // all transports (optional if you want flashsocket) 
     'websocket' 
     , 'flashsocket' 
     , 'htmlfile' 
     , 'xhr-polling' 
     , 'jsonp-polling' 
    ]); 
io.set('origins', 'http://questionexample.com/page1:*'); 
}); 

とノードRANS: 私は、そのコード(as recommended here)を有していました。プロダクションモードを有効にした後はすべて正常です。

私はそれが少し遅れての答えであることを知っているが、多分他の誰かがあなたがSocket.ioのソースコードに掘る場合

+1

はsocket.io v1 +で動作しません – felipekm

25

すると、あなたは、このような行を検索することを使用します。あなたのよう

var origin = request.headers.origin || request.headers.referer 
    , origins = this.get('origins'); 

... 

var parts = url.parse(origin); 
parts.port = parts.port || 80; 
var ok = 
    ~origins.indexOf(parts.hostname + ':' + parts.port) || 
    ~origins.indexOf(parts.hostname + ':*') || 
    ~origins.indexOf('*:' + parts.port); 

Socket.ioはクライアントからの発信元(またはリファラー)を取得し、ドメイン名とポート番号 を取得し、指定したoriginsオプションと比較します。

  • testsite.com:80
  • http://testsite.com:80
  • http://*:8080
  • *:8080
  • testsite.com:* http://someotherdomain.com:8080(スペースで区切って複数の起源:

    だから有効origins値は(*手段 "の任意")です)

  • testsite.com:*/somepath(ソケット。IO無視します/ somepath)
  • *:*

そして、これらは、(無効であるため、ポート番号なし):

  • testsite.com
  • http://testsite.com
  • http://testsite.com/somepath

起点の値としてsub.testsite.comを指定すると、testsite.com有効の起源となります。

関連する問題