Commit Graph

9 Commits

Author SHA1 Message Date
浅念 138b472485 feat: ip2region 离线地理解析(优雅降级)
GeoResolver 进程级单例,c_buffer 模式一次读入内存(线程安全)。
适配 py-ip2region 3.0.4 实际 API:new_with_buffer(version, buff) 需
Version 对象,由 xdb 头 256 字节探测(2.0 老库自动归 IPv4)。
数据段布局按结构版本分派:3.0 新库 国家|省|城市|ISP|国家代码,
2.0 老库 国家|区域|省|市|ISP——错位会把 ISP 串进 city。
包/xdb 缺失或损坏时 resolve 一律返回 None,测试全绿。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 12:28:01 +08:00
浅念 7b26c7e14a fix: 孤代理三入口堵漏+精确断言+截断清洗换序
- _utf8_ok 助手:event_id/path/title 含孤代理("\ud800")在入口即拒
  (原会流到下游 encode 必 500);props 字节守门 try/except 归入 properties_invalid
- 补零覆盖原因码测试:path=123 → invalid_field_type;utm 三层嵌套 → properties_depth
- 子串断言("sensitive" in r 等)全改精确等值断言,码即 API
- path 改为先 sanitize_url 再截 500:中文查询参数 urlencode 膨胀最多 3 倍,
  先截后洗会破坏出门 ≤MAX_PATH_LEN 不变量(实测汉*200 查询洗后截回 500)
- docstring 写明就地写回契约(Task 6 ingest 依赖)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 12:20:27 +08:00
浅念 c5f900f3bd fix: 校验守门按字节+递归长度+非dict拒绝
- 体积守门改 UTF-8 字节数(原按字符数,"汉"*1500 约 4.5KB 可绕过 4096 上限)
- 字符串长度检查并入 _walk_props 递归,嵌套字符串同样受 MAX_STR_LEN 约束
  (顺序:体积先行,故同一值既超长又超体积时报 properties_too_large)
- properties 传了但非 dict([]/""/0/None)不再被 or {} 静默放行,缺省键仍放行

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 12:10:56 +08:00
浅念 f2a5f7611a fix: 校验加固(嵌套敏感键/naive时间防御)
- _depth_ok 与敏感键扫描合并为单次递归 _walk_props,dict 所有层级键均过
  _SENSITIVE(此前嵌套键不扫描,utm 白名单内可夹带敏感键)
- occurred_at 为 naive datetime 时返回 invalid_occurred_at(原为 TypeError 500)
- 删除未使用的 timedelta 导入
- 深度超限即停止下探,10 万层嵌套不爆栈

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 12:04:40 +08:00
浅念 cb57e67179 feat: 事件校验服务(白名单/敏感键/时间窗/URL清洗)
TDD:7 测试先红(ModuleNotFoundError)后绿。与计划的一处偏差:
敏感键扫描移至属性白名单之前——白名单内无任何键命中敏感模式,
原顺序下 sensitive_field 不可达,test_sensitive_property_rejected
(user_password 非白名单键)将得到 property_not_allowed 而失败。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 12:01:45 +08:00
浅念 462852c3f3 fix: VisitSession 时间戳恢复 NOT NULL,测试补显式时间(修正计划的测试笔误)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 11:46:51 +08:00
浅念 d1472c1845 feat: 核心数据模型(Site/Visitor/VisitSession/Event/DailyStat)
VisitSession.started_at/ended_at 在计划模型基础上加 null=True(计划测试
未传这两字段,原 NOT NULL 会导致测试失败;ended_at 为空也表示会话进行中)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 11:45:03 +08:00
浅念 2a7f08fd14 fix: Task1 质量审查修复(RuntimeError fail-fast/ALLOWED_HOSTS strip/lock 清理/测试缓存隔离)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 11:27:25 +08:00
浅念 6dbe26af0b chore: Django 工程骨架(config+tracker app+常量)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 11:16:01 +08:00