Secure Coding Dojo 是一个用于提供安全编码培训的平台。 虽然它自带存在漏洞的培训应用(Insecure.Inc 网站),但该培训门户也可以与其他培训应用结合使用。 该平台的优势在于其可扩展性,以及与常用的开发协作平台 Slack 的集成。 培训门户可以轻松地在云中设置,AWS Elastic Beanstalk 的设置说明见下文。
请务必也查看 wiki,了解有关部署和安装 Dojo 的更多详细信息。
下载 demo 以体验培训门户和 Insecure.Inc 应用。
还可以查看 /screenshots

以下步骤将为你提供 Dojo 的基本配置。有关高级配置和集成,请查看 wiki
安装最新版本的 Docker。
git clone 该仓库
切换到仓库根目录
配置一个环境变量 DATA_DIR 作为 dojo 文件的挂载点。在 *nix/mac 系统上,按如下方式修改 .bash_profile
export DATA_DIR="/YOUR_DATA_DIR"
在 Mac 上,你必须在 Docker > Preferences > File Sharing 中允许 Docker 访问此目录
重启你的终端
使用以下命令运行
docker-compose up
用于教授应用安全概念的开源培训网站并不新鲜,但这些网站的目标受众一直是渗透测试人员和道德黑客。 Secure Coding Dojo 主要旨在作为面向开发人员的交付平台,原因如下:
虽然我们不保证合规性,但该培训可用于满足 PCI 6.5.a 等合规性要求。请参阅 Insecure.Inc 课程文档中关于映射到 SANS 25/ OWASP Top 10 / PCI 6.5 的内容。
培训门户
Insecure.Inc
培训门户
Insecure.inc
培训门户
Insecure.Inc
请查看 wiki。
更多信息请参阅 wiki。
你需要创建一个 Slack 应用用于身份认证。
也可以在 config.json 中配置 Google 身份认证。你需要一个 Google 开发者帐户,并从 Google API 控制台获取 OAuth 凭据:https://console.developers.google.com
在同一个地方,你将设置你的域和授权重定向 URI。例如,对于 localhost 设置,重定向 URL 为:http://localhost:8081/public/google/callback
对于小型团队或预配置镜像,Slack 或 Google 身份认证可能不可用。对于这种场景,你可以配置使用本地平面文件进行身份认证。
查看 wiki 以了解更多信息。
如果你不配置数据库,培训门户将仅使用本地 SQLite 数据库。
你也可以安装 MySQL,并为此数据库创建数据库和凭据。请注意你的用户名和密码,稍后需要用到。
你必须将加密密钥设置为操作系统环境变量。在 *nix/mac 系统上,按如下方式修改 .bash_profile
export ENC_KEY="put something random here"
export ENC_KEY_IV="put something random here"
以下内容用于防止参与者自行生成挑战代码。
export CHALLENGE_MASTER_SALT="put something random here"
你可以按照现有课程的模式添加新课程。
挑战定义在 ./trainingportal/static/lessons 中 文件 definitions.json 通过代码块 ID 指向相应的 HTML 挑战描述、播放链接和相应的代码块。 按照已定义的示例创建新挑战。
.
+-- /trainingportal/static/lessons
| +-- modules.json //configuration file where lesson modules are defined
| +-- /attack-grams //visual representations of attacks included in challenge descriptions
| +-- /blackBelt //lesson module
| +--definitions.json //individual lesson definitions
| +--cwe494.md // html or markdown file including the lesson description
| +--cwe494.sol.md //solution for the lesson
| ....
| +--quiz.html
| +-- /secondDegreeBlackBelt
代码块定义在 ./trainingportal/static/codeBlocks 中。此文件夹具有类似的结构,包含一个定义 JSON 和每个挑战的一组 HTML 文件。
.
+-- /trainingportal/static/codeBlocks
| +-- codeBlocksDefinitions.json //configuration file where code blocks are defined
| +-- authenticationByDefault.html //code block description html
| ...
| +-- useStrongDataEncryption.html