我有几个网站,我想检查哪个网站调用我的 api,我在 node.js 中执行此操作
const mySite = req.headers && req.headers.referer.split('/')[2]
在正常情况下,我会得到 mysite1.com、myothersite.net,但是上面的代码“安全”吗?在什么情况下标题不存在?如果我从 POSTMAN 调用并且不添加 header 会导致上述代码出现任何问题吗?
最佳答案
I know it's not secure, at least it did something. My concern will above code crash my server if referer is not present.
是的,它会崩溃。在您的代码中,如果未发送Referer
,您将收到此错误
TypeError: Cannot read property 'split' of undefined
由于您使用的是 express ,因此可以使用req.header() ,使您的代码更短更安全:
const mySite = (req.header('Referer') || '').split('/')[2];
// ^^^ case insensitive header check
我使用了req.header('Referer') || ''
以确保我们始终获得一个字符串,即使未设置 header ,因此 .split
是安全的。
除了不区分大小写之外,使用 req.header()
的好处是,Referrer 和 Referer 字段可互换。
关于javascript - 从客户端传递referer并在node.js中获取headers.referer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50520355/