由于轻量、快速且可扩展,Node.js 正成为开发 Web 应用程序的广泛采用平台。本项目提供了一个环境,用于学习 OWASP Top 10 安全风险如何适用于使用 Node.js 开发的 Web 应用程序,以及如何有效解决这些风险。
适用于 Node.js Web 应用程序的 OWASP Top 10:
此应用程序附带了一个教程页面,解释了 OWASP Top 10 漏洞以及如何修复它们。
一旦应用程序运行,您可以在 http://localhost:4000/tutorial(或您配置的端口)访问教程页面。
为忍者打造的易受攻击 Node.js 应用 用于利用、破坏和修复。您可能想要建立您自己的应用副本来修复和测试漏洞。提示:在源代码中查找注释。
数据库预先填充了以下用户账户,它们是种子数据的一部分:
admin 密码:Admin_123user1 密码:User1_123)、(用户:user2 密码:User2_123)安装 Node.js - NodeGoat 需要 Node v8 或更高版本
克隆 GitHub 仓库:
git clone https://github.com/OWASP/NodeGoat.git
进入目录:
cd NodeGoat
安装 node 包:
npm install
设置 MongoDB。您可以在本地安装 MongoDB,也可以创建远程实例:
使用本地 MongoDB:
使用远程 MongoDB 实例:
MONGODB_URI 环境变量设置为您的集群的连接字符串,该字符串可在集群的
连接对话框中查看。选择“连接你的应用程序”,
将驱动程序设置为“Node.js”,版本设置为“2.2.12 或更高版本”。这将给出如下形式的连接字符串:
mongodb://<username>:<password>@<cluster>/<dbname>?ssl=true&replicaSet=<rsname>&authSource=admin&retryWrites=true&w=majority
<username> 和 字段需要填入之前添加的数据库用户的详细信息。 字段设置 nodegoat 将在集群中使用的数据库名称
(例如 "nodegoat")。其他字段将已为您集群填好正确的详细信息。默认情况下,应用程序将托管在 4000 端口,并连接到 localhost:27017 的 MongoDB 实例。要更改此设置,请设置环境变量 PORT 和 MONGODB_URI。
其他设置可以通过更新 配置文件 来更改。
该仓库包含设置应用程序和数据库实例并将它们连接在一起所需的 Dockerfile 和 docker-compose.yml。
安装 docker 和 docker compose
克隆 GitHub 仓库:
git clone https://github.com/OWASP/NodeGoat.git
进入目录:
cd NodeGoat
构建镜像:
docker-compose build
运行应用程序,这将在 http://localhost:4000/ 启动 NodeGoat 应用程序:
docker-compose up
此选项使用免费的(每月 $0)Heroku node 服务器。
虽然不是必须的,但建议您 fork 此仓库并部署 fork 后的仓库。 这将允许您在自己的 fork 版本中修复漏洞,然后在 Heroku 上部署和测试。
设置一个可公开访问的 MongoDB 实例:
通过点击下面的按钮将 NodeGoat 部署到 Heroku:
在“新建应用”对话框中,将 MONGODB_URI 配置变量设置为您的 MongoDB Atlas 集群的连接字符串。
这可以在集群的 连接对话框 中查看。
选择“连接你的应用程序”,将驱动程序设置为“Node.js”,版本设置为“2.2.12 或更高版本”。
这将给出如下形式的连接字符串:
mongodb://<username>:<password>@<cluster>/<dbname>?ssl=true&replicaSet=<rsname>&authSource=admin&retryWrites=true&w=majority
<username> 和 <password> 字段需要填入之前添加的数据库用户的详细信息。<dbname> 字段设置 nodegoat 将在集群中使用的数据库名称
(例如 "nodegoat")。其他字段将已为您集群填好正确的详细信息。
请遵循 贡献指南
本项目受 行为准则 约束。
以下是 NodeGoat 项目出色的 贡献者。
代码基于 Apache License v2.0. 许可。
<password><dbname>使用应用程序所需的种子数据填充 MongoDB:
npm run db:seed
默认情况下,这将使用 "development" 配置,但如有需要,可以将所需的配置作为参数传递。
启动服务器。您可以使用 node 或 nodemon 运行服务器:
npm start
npm run dev