如果next()
是特定值,我有一些只调用req.referer
的中间件。
客户端能否以某种方式改变将分配给req.referer
的值?
中间件的目标是保护静态资产。静态资产只能由经过身份验证的用户请求,一旦经过身份验证,用户将被重定向,以使req.referer
的值“通过”中间件检查。
这样安全吗?如果没有,有更好的方法吗?
答案 0 :(得分:1)
客户可以非常轻松地改变它。
你永远不要相信Referer标题,就像你永远不要相信客户提供的任何数据一样。
您应该检查Cookie中的标记,或者将某些标记作为路径的一部分或作为查询参数添加到URL中,而不是依赖Referer标头。
例如,对于表单中的每个链接:
http://www.example.com/path/file.pdf
你可以做一个代币:
http://www.example.com/path/file.pdf?token=XXX
其中XXX将是您的服务器签名的内容,可能包括用户,令牌的到期日期,使用范围等。这样您可以获得更精细的控制,而不仅仅是嘲笑用户是否登录。< / p>