Origami CAPTCHA 是一个用 Go 编写、无需 JavaScript 的自托管“拖动物品”验证码,利用原生 HTML/CSS 交互和服务器端状态进行用户验证。

Stars

5

7 天增长

暂无数据

Fork 数

1

开放 Issue

0

开源协议

MIT

最近更新

2026-07-28

AI 仓库情报摘要
FR-AI / ANALYSIS

为什么值得关注

它通过 HTML 单选按钮、CSS :checked 状态和图片输入的坐标提交,完全在无客户端 JavaScript 的情况下实现验证码,非常适合 Tor、NoScript 和注重隐私的环境。

适合谁使用

  • 禁用 JavaScript 的 Tor 浏览器用户
  • 注重隐私、希望自托管且无跟踪器的开发者
  • 寻求无 JavaScript 替代方案的无障碍支持者
  • 需要为静态或低 JS 站点提供机器人防护的 Web 开发者

典型使用场景

  • 隐私导向网站的联络表单
  • 需要验证码但避免第三方脚本的登录页面
  • 用于无障碍或非 JavaScript 环境的备用验证码
  • 自托管应用的授权流程

项目优势

  • 无需 JavaScript – 无需客户端脚本即可工作
  • 自托管且保护隐私 – 无外部跟踪或行为收集
  • 服务器端状态 – 所有挑战逻辑和验证在后端完成
  • 部署简单 – 单一 Go 二进制文件,配置最少

使用前须知

  • 移动端因无光标改为点击放置而非拖拽
  • 需要 Go 1.26+ 才能编译运行
  • 相对于托管式验证码服务需要自行维护

README 快速开始

Origami CAPTCHA

Origami CAPTCHA is a self-hosted, zero-JavaScript "Drag The Item" CAPTCHA authorization provider written in Go. Users solve a responsive visual puzzle by moving two origami objects onto their matching upright outlines.

Demo

Primary purpose

Origami CAPTCHA is designed for environments where client-side JavaScript is unavailable, unwanted, or deliberately disabled.

  • Tor Browser users running NoScript or higher security modes that disable JavaScript.
  • Privacy-focused deployments that want a CAPTCHA option without third-party scripts, tracking widgets, or browser-side behavioral collection.
  • Accessibility and compatibility fallback.
  • Additional CAPTCHA variation for Tor environments

How dragging works without JavaScript

The interaction uses native HTML form controls and CSS while the server keeps all challenge state:

  1. Each origami piece is a `` connected to a hidden radio input. Clicking or tapping the piece selects it without JavaScript.
  2. CSS uses the selected radio's :checked state to change the cursor into that origami piece.
  3. A transparent `` covers the challenge canvas. While it is active, CSS hides the original piece, creating the visual effect of picking it up and dragging it.
  4. When the user releases or taps the canvas, the browser natively submits pick.x and pick.y coordinates to /c/{challenge_id}.
  5. The server stores the submitted position and renders the updated challenge page. No position or solution state is stored in browser JavaScript.
  6. Pressing Confirm sends a normal form POST to /verify. The server checks whether both submitted coordinates are close enough to their matching upright outlines.

The essential browser behavior is provided by:


...

An image input automatically submits coordinates as pick.x and pick.y, which makes the server-driven drag interaction possible without executable client-side code.

Limitation on mobile

The desktop drag effect depends on a mouse cursor that can visually become the selected origami piece. Touch devices do not have that cursor, so a true drag effect is not available without client-side JavaScript. On mobile, the challenge intentionally uses a tap-to-place flow instead: tap an origami piece to select

项目描述

A self-hosted, zero-JavaScript "Drag The Item" CAPTCHA authorization provider for privacy-focused websites.

相关仓库与替代方案

根据分类、Topic 和编程语言匹配的相似项目。

m-novotny
精选
m-novotny GitHub avatar

memguard-rs

A Rust library that provides secure memory handling primitives including zeroization on drop, memory locking, constant-time comparison, and compile-time guarded regions, with zero dependencies and no_std support.

嵌入式与物联网安全
131
uzairansaruzi
精选
uzairansaruzi GitHub avatar

hermex

Hermex is a native SwiftUI iPhone app that lets you control a self-hosted Hermes AI agent directly from your phone, with no subscriptions, tracking, or third-party relay.

AI 与机器学习大语言模型
941
S40911120
精选
S40911120 GitHub avatar

recensa

Recensa is a self-hosted web viewer that indexes Claude Code session transcripts into a local SQLite database, enabling full-text search, replay, and audit of all past agent conversations without uploading data anywhere.

AI 与机器学习大语言模型
67