Skip to content

🐛 fix changes too large#97

Merged
DGuang21 merged 3 commits into
mainfrom
fix/security-and-paging
Jun 2, 2026
Merged

🐛 fix changes too large#97
DGuang21 merged 3 commits into
mainfrom
fix/security-and-paging

Conversation

@DGuang21

@DGuang21 DGuang21 commented Jun 2, 2026

Copy link
Copy Markdown
Member

No description provided.

DGuang21 added 3 commits June 1, 2026 11:17
executeCreateBookmark 按全局唯一的 sr_user_bookmark.uuid 查到既有行后,
直接按 uuid update,未校验 user_id 归属。攻击者提交 op=PUT、
id=<受害者 uuid> 即可改写他人书签的 bookmark_id/deleted_at/archive_status。

补齐归属校验:UUID 存在但不属于当前用户时抛 ShareActionNotAllowedError;
update 的 where 同时锁定 user_id 作为双保险。与同文件 update/delete/comment
路径已有的归属校验保持一致。
getPartialBookmarkChanges 查 append-only 变更日志且无上限,单用户变更过多时
15 天窗内全量返回会使 JSON 序列化超出 V8 buffer 上限,抛 RangeError:
Invalid array buffer length(聚合 4 样本/27 次,与重试堆叠吻合)。

客户端(浏览器扩展)单向推进同步游标(只拉 created_at > previous_sync),
且假定响应为倒序(内部 logs.reverse 后按时间正序应用),出错仅重试不降级。
据此改为【前向分页】,响应结构与客户端零改动:

- 查询取游标之后最旧的一批 (ASC) 最多 5000 条
- previous_sync 取本批最新一条:被截断时为'中间点',客户端下次从此继续
  往后拉,逐批追平不丢数据;未截断时即为最新,已追平
- 响应按倒序返回以兼容客户端 logs.reverse
- createBookmarkChangeLog 写入端截断超长 target_url (>2048)

all_changes 因 JOIN sr_user_bookmark 天然每书签一行,无需处理。
@DGuang21 DGuang21 merged commit 2dedf31 into main Jun 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant