2017-01-17 5 views
0

私のMEANアプリケーションでは、APIと静的なWebファイルがあります。 index.htmlおよびlogin.htmlである。私はすべてであればこれが可能です思ったんだけど -ノード/エクスプレス - IPは経路にはアクセスできますが、静的なファイルには制限しない

//Routes 
app.use('/mysuperapi', require('./routes/api')); 

//For static files 
app.use(express.static('site')); 

私は、ユーザーが自由になmysite.com/mysuperapiとしてURLを行くことができるようにしたいしなかった場合は?

APIの認証ルートを呼び出すようなlogin.htmlのページは、ユーザーのマシンから発生するため、すべてのIPが自分のサーバーを期待するホワイトリストを正確に作成できません。

すべてのAPIは公開されていますか?

アドバイスありがとうございます。

ありがとうございました。

答えて

4

最初app.useステートメントの機能は、パターンに一致し、それはあなたのAPIに到達する前に、すべてのパスのために呼び出されるインスタンスの

、他のミドルウェア層を追加することにより、
app.use('/mysuperapi/*', function(req, res, next) { 
    // do your filtering here, call a `res` method if you want to stop progress or call `next` to proceed 
    var ip = req.ip || 
      req.headers['x-forwarded-for'] || 
      req.connection.remoteAddress || 
      req.socket.remoteAddress || 
      req.connection.socket.remoteAddress; 

    // Your allowed ip. You can also check against an array 
    if (ip == '5.4.3.2') { 
     next(); 
    } else { 
     res.end(); 
    } 
} 

app.use('/mysuperapi', require('./routes/api')); 

// ... the rest of your code 

をルートへのアクセスを制限することができます、そこでアクセスを制限することができます。

+0

すごくいいですね。しかし、私は何かを理解するように見えることはできません。あるユーザーがログインページにいて、認証ルートを呼び出すと、そのユーザーのIPを許可する必要があります。だから、私は本当にサイトを介してアクセスするユーザーだけにAPIを制限することができないだろうか? – userMod2

+0

これを追加するには、ブロッキングの目的はAPIを「バッシュ化」したくないということです。誰かが認証ルートを知っていれば、100万のユーザー名とパスワードを確かに試すことができます。 – userMod2

+0

あなたのサイトからのアクセスを制限するだけの場合は、あなたのサイトからの呼び出しを受信するようにアクセスコントロールヘッダーを設定することができます。つまり、 'Access-Control-Allow-Origin:http:// yoursite.com' 。参考までにこちらをご覧ください。https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Origin – ruedamanuel

関連する問題