• 【Express.js】安全性


    安全性

    在 Web 应用中,安全亦是相当重要的一环,在正式的场景下,数据安全尤为重要。

    使用高稳定版本的 Express

    Express 2.x 和 Express 3.x 已不再维护,其中存在的安全性和性能问题不会得到修复,请尽可能的使用或迁移到 Express 4.x

    使用 TLS

    如果应用需要处理或传输敏感数据,请使用 TLS 来保护连接和数据,TLS 在客户端发起阶段对其加密,从而防止初步的黑客行为。

    使用 Helmet

    helmet.js 是一个 Express 中间件,用于设置 HTTP 标头来帮助 Express 应用免受一些常规的 Web 漏洞:

    • CSP 设置标头以防止跨站脚本攻击和注入,Content-Security-Policy
    • hidePoweredBy 删除 X-Powered-By 标头
    • hsts 设置强制与服务器建立安全连接(https)Strict-Transport-Security
    • noCachePragma 禁用客户端缓存 Cache-Control
    • noSniff 设置以防止浏览器从声明内容类型嗅探响应的 MIME
    • frame 设置以防止点击劫持 X-Frame-Options
    • xssFilter 设置以禁用 XSS 缺陷脚本 X-XSS-Protection

    使用方法:

    npm install helmet --save
    
    • 1

    挂载到 app:

    const helmet = require("helmet")();
    
    app.use(helmet);
    
    • 1
    • 2
    • 3

    安全地使用 Cookie

    为确保 Cookie 不会打开您的应用而受攻击,请不要使用默认 Cookie 会话名称:

    const Session = require("express-session");
    
    app.set("trust proxy", 1);
    app.use(Session({
      secret: 'express-demo',
      name: 'sessionX'
    }));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    此外,设置一些安全选项来确保 Session 安全:

    app.use(Session({
      name: "sessionX",
      keys: ["evp-key-1", "evp-key-2"],
      cookie: {
        secure: true,
        httpOnly: true,
        domain: 'express-demo.com',
        path: 'security',
        expires: new Date(Date.now() + 60 * 60 * 1000) // 1 hour
      }
    }));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    争对暴力攻击的端点保护

    如争对同一用户或同一IP的短期内大量失败行为进行监测,进行适当的用户封禁和IP封禁。

    rate-limiter-flexible 提供了相关的技术支持,文档详见此处

    确保依赖安全

    您正在使用的 npm 包也许存在安全漏洞,你可以使用 npm audit 来分析依赖树,并通过 npm audit fix 进行简单的修复,如果你想要更精细的控制依赖安全,可以尝试一下 snyk.js:

    • 安装
    npm install -g snyk
    
    • 1
    • 检测漏洞
    synk test
    
    • 1
    • 引导修复
    synk wizard
    
    • 1

    其它注意事项

    以下是优秀的 Node.js 安全检查表中 的一些进一步建议。有关这些建议的所有详细信息,请参阅该博客文章:

    • 使用 csurf 中间件防止跨站点请求伪造(CSRF)。
    • 始终筛选和清理用户输入,以防止跨站点脚本 (XSS) 和命令注入攻击。
    • 使用参数化查询或预准备语句防御 SQL 注入攻击。
    • 使用开源 sqlmap 工具检测应用中的 SQL 注入漏洞。
    • 使用 nmap sslyze 工具测试 SSL 密码、密钥和重新协商的配置以及证书的有效性。
    • 使用安全正则表达式确保您的正则表达式不容易受到正则表达式拒绝服务攻击。

    下一节-健康检查

  • 相关阅读:
    LeetCode 888. Fair Candy Swap
    4.RabbitMQ 消息确认机制
    游戏性能优化
    如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)
    ElasticSearch简介
    独孤九剑第一式-岭回归和Lasso回归
    简单记一下Vue router 路由中使用 vue-i18n 进行标题国际化
    【云原生&微服务三】SpringCloud之Ribbon是这样实现负载均衡的(源码剖析@LoadBalanced原理)
    可能是全网最清晰的KMP算法讲解
    windows设置右键打开 vscode的方法(简易版)
  • 原文地址:https://blog.csdn.net/m0_51810668/article/details/132774083