如何预防"其他"访问URL的域名

时间:2018-04-11 19:57:49

标签: javascript reactjs http access

我有一个从API中提取数据的Node / React应用程序。

在服务器端(server.js),我有一个“内部”URL,用于从API中获取数据,然后将其作为JSON返回。像这样:

server.get('/api/data', (req, res) => {
  Promise.resolve(getAPIData()).then(data => {
    res.writeHead(200, {'Content-Type': 'application/json'})
    return res.end(serialize(data))
  }).catch((error) => {
    console.log(error)
    res.writeHead(200, {'Content-Type': 'application/json'})
    return res.end(serialize({}))
  })
})

然后在React(Next.js)的前端,我使用example.com/api/data URL获取此JSON并将其显示在页面上。

我的问题是我想限制只能从我的域访问example.com/api/data网址(在这种情况下,我们说的是example.com)。我不希望someotherdomain.com能够从网址访问相同的数据。

我安装了 helmet ,但这并不是我想要的。 CORS似乎也不是答案。

有没有一种标准方法可以做到这一点?

更新

这是我尝试用CORS做的事情。使用这个包: https://github.com/expressjs/cors

const cors = require('cors')

...

const corsOptions = {
  origin: (process.env.NODE_ENV === 'development') ? 'http://localhost:3000' : 'https://example.com',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}

然后在路线上:

server.get('/api/data', cors(corsOptions), (req, res) => {
  Promise.resolve(getAPIData()).then(data => {
    res.writeHead(200, {'Content-Type': 'application/json'})
    return res.end(serialize(data))
  }).catch((error) => {
    console.log(error)
    res.writeHead(200, {'Content-Type': 'application/json'})
    return res.end(serialize({}))
  })
})

0 个答案:

没有答案