K KComment 评论系统 · KC GitHub
自托管评论系统 · MIT 开源 · V1.0

留下观点
带走隐私

KComment 把评论系统最该做、却总被跳过的事做完了:接入像 Twikoo 一样简单, 邮箱只存哈希、IP 永不下发、匿名是真的匿名。数据躺在你自己的 SQLite 里, 不在任何云厂商的报表里。

npm install → npm start · SQLite 单文件 · 无统计脚本
演示区现有 条评论,此刻即可参与

§01Live Demo 实机演示

这不是录屏,
是正在运行的 KComment。

下方评论区跑在本站的真实后端上(Cloudflare Pages Functions + D1)。发表、回复、点赞、勾匿名——都可以试。

§02Design Principles 设计原则

隐私不是功能,
是默认值。

大多数评论系统把「收集」当作理所当然。KComment 反过来:先假设每个字段都敏感,再逐个给出不收集的理由

01

邮箱零明文

只存 md5 哈希用于生成头像。数据库被拖走,访客邮箱也不会泄露——因为里面根本没有。

md5(email)
02

IP 永不下发

IP 与 UA 只进数据库、只给管理员治理用。所有对外接口经 toPublic() 统一清洗,内部字段一个都漏不出去。

toPublic()
03

匿名是真匿名

勾选匿名后,对外只返回脱敏昵称。真实昵称不落接口,F12 抓包也验证不出原身份。

anon_alias()
04

敏感词内置

Trie 匹配、命中打码、词表热更新。不依赖任何外部内容安全服务。

filter() → "**"
05

点赞防刷

服务端令牌去重(IP+UA 指纹),同一访客只计一次。改前端、重放请求都无效。

sha256(ip|ua)
06

XSS 双保险

后端先转义再落库,前端 textContent 渲染。两层防护,缺一层也够呛,两层都在。

escape → textContent
§03Comparison 对比

和 Twikoo 比,
差在哪。

Twikoo 是先行者,至今仍然优秀。KComment 没有重新发明评论,只是把隐私和安全做成了绕不过去的底层

能力TWIKOOKCOMMENT
邮箱存储明文,可在后台查看只存 md5 哈希
IP 暴露需自行处理对外接口不下发
匿名发言需第三方内置脱敏昵称
敏感词过滤依赖外部服务内置 Trie,词表热更新
防刷点赞服务端令牌去重
管理审核有,另含举报队列与心跳

对比基于 Twikoo 公开文档与源码(twikoo.js.org),欢迎提 issue 指正。

§04Quickstart 接入

像 Twikoo 一样,
一段脚本就能用。

一个挂载点,一行脚本。样式自动注入,服务器地址自动识别——你的访客什么都不用装。

your-page.html · 最简接入
<div id="kcomment"></div>
<script src="https://kc.kang0234.top/widget/comment-widget.js"></script>

放上去就能评论,写入本站演示库。适合先体验效果。

terminal · 自托管
# 克隆、安装、启动,一气呵成
git clone https://github.com/Kang0234/KComment.git
cd KComment && npm install
cp .env.example .env   # 改掉 ADMIN_PASSWORD 与 JWT_SECRET
npm start

评论存进你自己的 SQLite,widget 脚本换成 https://你的域名/widget/comment-widget.js 即可。

进阶 · 手动初始化
<div id="kcomment"></div>
<script src="/widget/comment-widget.js"></script>
<script>
  kcomment.init({
    el: '#kcomment',
    server: 'https://your-server.com',  // 缺省自动识别
    pageKey: '/post/hello-world'          // 缺省用 location.pathname
  });
</script>
属性配置 · 零 JS
<div id="kcomment"></div>
<script
  src="https://kc.kang0234.top/widget/comment-widget.js"
  data-server="https://your-server.com"
  data-page-key="/post/42"
  defer></script>

样式变量(--kc-accent 等)都在 .kc-widget 上,可整站换色。

§05API 接口

十个端点,
没有更多的了。

后端刻意保持小。一个下午能读完的代码量,才是能被审计的代码量。

前台

公开 · 免鉴权
GET/api/comment树形评论(已脱敏)
POST/api/comment发表 / 回复
POST/api/comment/:id/like点赞 / 取消
POST/api/comment/:id/report举报

管理

Bearer Token
POST/api/admin/login登录
GET/api/admin/comments列表(含治理字段)
PATCH/api/admin/comments/:id/review审核
DEL/api/admin/comments/:id删除(含回复)
GET/api/admin/heartbeat待审 / 举报心跳
GET/api/admin/reports举报队列

访客把想法留下,
而不是把隐私留下。

MIT 开源 · 自托管 · SQLite 单文件数据库