jackseceng/LinkShort

GitHub: jackseceng/LinkShort

一个以安全设计为核心、集成完整 DevSecOps 流水线的容器化短链接服务,适合学习安全开发和自动化安全检测实践。

Stars: 2 | Forks: 0

# LinkShort [![SAST](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f90973129a083858.svg)](https://codeql.github.com/) [![镜像扫描](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/219224e2f6083901.svg)](https://github.com/jackseceng/LinkShort/actions/workflows/container.yml) ![镜像大小](https://img.shields.io/docker/image-size/jackseceng/linkshort/latest) ![代码库大小](https://img.shields.io/github/languages/code-size/jackseceng/LinkShort) 这是一个链接缩短 Web 应用的 Python 代码、Web 资产和 Docker 配置 - 在 [cubel.ink](https://cubel.ink) 试用该应用 - 下载 [DockerHub 镜像](https://hub.docker.com/r/jackseceng/linkshort) 我正在使用此仓库学习: - Docker & Web App Hosting - Python Web 开发 - DevSecOps 自动化 ## 本地测试 以下是在您的机器上本地设置容器以进行测试和开发的说明。 ### 数据库 首先,[注册一个免费的 Turso 账户](https://app.turso.tech/signup),并使用以下 SQL 语句创建一个名为 `urls` 的数据库表: ``` CREATE TABLE urls ( hashsum VARCHAR(64) PRIMARY KEY, url BLOB, salt BLOB, CONSTRAINT unique_hash UNIQUE (hashsum) ); ``` ### Captcha & Web 资产存储 首先,[注册一个免费的 Cloudflare 账户](https://dash.cloudflare.com/sign-up) 然后,为您的 TLD 和 localhost 域设置 turnstile widget。 接下来设置 R2 存储,并将您的 TLD 链接到服务以用于生产环境。 设置好存储后,将您的静态 Javascript 和图像资产上传到 bucket 的根目录,确保它们的名称与 HTML 文件头中引用的名称匹配。 如果您修改了静态 Web 文件,请将您的 HTML 指向本地托管的版本,或者使用 AWS CLI 的 sync 命令从仓库根目录手动将更改后的文件上传到 R2 开发 bucket: ``` aws s3 sync app/static s3:// --endpoint-url https://.eu.r2.cloudflarestorage.com ``` 或者,如果您在欧盟境外: ``` aws s3 sync app/static s3:// --endpoint-url https://.r2.cloudflarestorage.com ``` ### 设置本地环境 您需要在 `/app` 目录中创建一个名为 `.env` 的文件,包含以下内容,并用您自己的替换值设置适当的值: ``` ENDPOINT="" TOKEN="" CF_SECRET="" TLD=localhost CDN="" ``` **! 警告 !** `docker-compose.yaml` 和 `.env` 文件必须在适用的地方引用相同的变量名称,此外请确保变量名称未在您的测试环境中的其他地方设置。 ### 启动本地实例 从此仓库的根目录运行: ``` docker compose up -d --build ``` ``` [+] Running (2/2) ✔ Network linkshort_ls-net Created ✔ Container linkshort-app-1 Started ``` 如果成功,应用将在 [http://localhost](http://localhost) 运行,它将通过互联网连接到您的 Turso 数据库。 每当您进行更改时,都可以重新运行此命令以重建容器。 要关闭服务,请运行此命令: ``` docker compose down ``` ## 功能 - [x] 使用唯一扩展名缩短 URL - [x] 加密存储的 URL 以及随机 salt - [x] 扩展名在数据库中存储为 hashsum - [x] 对请求中的 URL 和扩展名的用户输入进行清理 - [x] 检查用户共享的 URL,确保它们以 HTTPS 开头 - [x] 使用最小化的 scratch 镜像以保障运行时安全 - [x] 根据垃圾邮件列表检查提交的 URL,拒绝已知的垃圾邮件域名 - [x] 生成供用户下载和分享的 QR 码 - [x] 具有 reactive CSS & HTML 的前端 - [x] 带有页面的 400 和 500 HTTP 错误处理 - [x] 主页上的 Captcha:使用 [Cloudflare Turnstile](https://www.cloudflare.com/en-gb/application-services/products/turnstile/) - [x] 通过 CDN 提供静态内容:通过 [Cloudflare R2](https://www.cloudflare.com/en-gb/developer-platform/products/r2/) 提供 - [x] 演示应用程序设置:托管在 [cloud.run](https://cloud.run) - [ ] 用户在主表单中输入的自定义 URL - [ ] URL 统计页面,用于查看链接获得的点击次数 ## DevSecOps 代码 Linting: - [x] [Super Linter](https://github.com/super-linter/super-linter) 静态 & 软件成分分析: - [x] [CodeQL](https://codeql.github.com/) - [x] [Snyk](https://snyk.io) - [x] [semgrep](https://semgrep.dev/products/semgrep-code/) 容器镜像扫描: - [x] [Grype](https://github.com/anchore/grype/) - [x] [Docker Scout](https://docs.docker.com/scout/) - [x] [Trivy](https://trivy.dev/latest/docs/target/container_image/) 自动化依赖升级: - [x] [Renovate](https://www.mend.io/free-developer-tools/renovate/) - [x] [Dependabot](https://github.com/dependabot) 提交标准化: - [x] [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) ## 由 [Jack](https://jacksec.engineer) 开发
标签:AI应用开发, CI/CD安全, Cloudflare R2, Cloudflare Turnstile, CodeQL, DevSecOps, DNS枚举, Docker, GitHub Actions, Llama, NIDS, Python, Turso数据库, URL缩短器, 上游代理, 安全设计, 安全评估工具, 安全防御评估, 容器化, 容器安全扫描, 对象存储, 无后门, 网络安全工具, 自动笔记, 请求拦截, 逆向工具, 防御逃脱, 验证码