问题描述
我在Heroku托管的Fastify服务器中具有以下代码:
this.server.addHook('preHandler',async(req,reply) => {
const isHttps = req.headers['x-forwarded-proto'] === 'https';
if (isHttps) {
return;
}
const {
method,url
} = req;
if (method && ['GET','HEAD'].includes(method)) {
const host = req.headers.host || req.hostname;
reply.redirect(301,`https://${host}${url}`);
}
});
这个想法是为了防止自it is not possible otherwise on Heroku以来通过HTTP
访问服务器,并在应用程序级别强制重定向到HTTPS
。
我的问题是:如果通过HTTP
向服务器发出的第一个请求(在重定向发生之前)包含敏感信息,例如用户名/密码,那还不是“危险”或以某种方式受到威胁吗? / p>
解决方法
您可能在Heroku上配置了错误的内容。
Heroku域(.herokuapp.com)为by default HTTPS enabled。同一页面上有自定义域SSL设置指南。由于您正在谈论(用户名+密码),因此我将假定这是一个网站。您所需要做的就是使用fastify-cors设置CORS。您的网站应始终通过HTTPS进行服务。
您也不应该使用上面的逻辑。 Fastify并不打算用作代理服务器。该文档强烈建议使用像nginx这样的前端代理服务器。使用Heroku,您不需要所有这些。它已经为您处理了。
将来,您还可以将Cloudflare用作Heroku之外的“代理服务器”。