我有一个nodejs/express应用程序,该应用程序服务于某些html
页面以及rest
服务。这些html
页面通过XMLHttpRequest
致电rest
服务。rest
服务也可以通过外部应用程序调用。
在服务器端,在我的rest
服务中,我想检查请求是否来自同一域,因为我只想外部应用程序来验证其请求(例如提供访问令牌(。
要这样做,我查看req.headers.referer
以获取页面的URL来源,并与我的服务器域进行比较。安全吗?req.headers.referer
可以通过试图在没有身份验证的情况下调用我的服务的外部应用更改吗?
是否有更聪明/更安全的方法?
根据此答案:https://stackoverflow.com/a/a/29531709/3953525可以操纵标头。就像答案中一样,我建议使用身份验证令牌而不是信任标头。
即使您是从相同的来源调用它可以轻松操纵/伪造的,也应该具有某种身份验证。
如果您在服务器端渲染HTML,则仅将渲染的HTML发送到客户端,那么您可以使用Origin,因为它将始终是本地主机,但是最好的方法将是使用某种模板引擎,例如Jade或EJS并在服务器端渲染HTML,否则在前端侧使用React/Angular,并从客户端管理事物,而不是使用Ajax进行关键请求。