【发布时间】:2021-07-15 01:30:36
【问题描述】:
许多 FaunaDB 身份验证指南都提倡将客户端密码存储为 cookie,以便将其附加到后续的数据库查询中,但它的安全性如何?实际上,秘密令牌百分百暴露在浏览器的 cookie 存储中。
假设这是 Next.JS 应用下的 /pages/api/login.js 处理程序:
import { Client, query as q } from 'faunadb'
import cookie from 'cookie'
const client = new Client({ secret: 'YOUR_SERVER_SECRET_KEY_DO_NOT_EXPOSE_THIS_EVER' })
const serializeFaunaCookie = secret => {
const cookieSerialized = cookie.serialize('FAUNA_SECRET_COOKIE', secret, {
sameSite: 'lax',
secure: process.env.NODE_ENV === 'production',
maxAge: 72576000,
httpOnly: true,
path: '/',
})
return cookieSerialized
}
export default async (req, res) => {
client
.query(q.Login(q.Match(q.Index('userByHandle'), req.body.handle), { password: req.body.password }))
.then(({ secret }) => {
res.setHeader('Set-Cookie', serializeFaunaCookie(secret))
res.status(200).end()
})
}
这个结果相当明显,域将设置一个像FAUNA_SECRET_COOKIE whateverrandomUpperCaseandlOWERcASEalphanum3r1calstring 这样的cookie - 它没有加密。
谢谢!
【问题讨论】:
标签: authentication session cookies faunadb