安全最佳实践

数据库受损 意味着攻击者获得了对我们数据库的访问权限, 为了防止这个问题我们必须始终加密密码和密码重置令牌, 这样攻击者无法窃取我们用户的密码,也无法重置他们。 蛮力攻击(重复实验随机密码) 让登录变得慢一点 足够多的加密密码:我们正在使用的 bcrypt 包; 限制同一个 IP 的请求次数; 设置一段时间内的用户最大登录次数 跨站脚本攻击 可以通过识别请求头中的 host 识别 不要将 JSON web 令牌存储在本地,应该存储到 cookie 中; 清除用户信息; 设置特殊 http 请求头: cookie 设置 httpOnly、security CSP:Content-Security-Policy, 限制脚本只能从当前源和指定的 CDN 加载 DOS 攻击 IP 频率限制 限制 body 负载大小 避免 【邪恶正则表达式】:非匹配输入的指数运行时间 NoSQL 查询注入攻击 攻击者向数据库输入查询语句,改变数据 使用 mongoose (因为 schemaType) 对用户输入消毒 认证与鉴权最佳实践 HTTPS 随机密码令牌,而不是根据日期 密码或令牌总是给出有效期 不要将敏感信息发送给用户 服务出错时不要将错误信息全部发给用户(比如报错堆栈) 执行高危险操作时身份验证 两因素身份验证:密码+验证码 相关 NPM 包 express-rate-limit 限制 IP 请求数 helmet 设置安全 http 响应头 xss-clean 防止 xss, 进行数据清洗

来源整理自:vue3js.cn 面试官系列