我有一个nodejs / express应用程序,用于服务某些html
页面以及rest
服务。
这些html
页面通过rest
调用XMLHttpRequest
服务。外部应用程序也可以调用rest
服务。
在服务器端,在我的rest
服务中,我想检查请求是否来自同一个域,因为我只希望外部应用程序验证他们的请求(例如提供访问令牌)。
为此,我查看req.headers.referer
以获取发起请求的页面的网址,并与我的服务器域进行比较。
安全吗?尝试在没有身份验证的情况下调用我的服务的外部应用程序可以更改req.headers.referer
吗?
有更智能/更安全的方法吗?
答案 0 :(得分:2)
根据这个答案:https://stackoverflow.com/a/29531709/3953525标题可以被操纵。在答案中,我建议使用身份验证令牌而不是信任标头。
答案 1 :(得分:1)
你应该进行某种身份验证,即使你从同一个来源调用它也可以很容易地操作/伪造。
如果你在服务器端呈现HTML然后只将该呈现的HTML发送到客户端,那么你可以使用origin,因为它总是localhost,但最好的方法是使用某种模板引擎,如玉或EJS并在服务器端呈现HTML,否则在前端使用react / angular并从客户端管理事物,而不是使用ajax来处理关键请求。