[META] Transport payload-size limits: consistent, correct, cross-transport enforcement
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 15/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- python
- Lĩnh vực
- backend, networking
Hướng nghiên cứu
Đây là một epic theo dõi, vì vậy hãy bắt đầu với các issue con 1908, 1909, 1910, 1911 và issue 2250 của Crossbar thay vì thực hiện thay đổi ở đây. Hãy đọc thiết kế đã thống nhất và enforcement point onFrameData; epic được hoàn thành khi mỗi issue con có PR đã được kiểm thử riêng và toàn bộ công việc được liệt kê đã hoàn tất.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
This is a tracking epic for a coordinated hardening of payload/message size
limits across the Autobahn|Python transports (WebSocket + RawSocket) and their
use in Crossbar.io. It originates from a reported denial-of-service issue
(security advisory GHSA-hxp9-w8x3-p566, "permessage-deflate bypasses
maxMessagePayloadSize after inflation", reported by Team Atlanta), but the
investigation surfaced a small cluster of related defects and design gaps that
are best fixed together so the size-limit model is finally coherent.
No development happens on this issue. Each child below is fixed on its own
issue + branch + PR, following our TDD red/green workflow (add the failing test
first, prove it red in CI, then fix, prove it green — all on the child's PR).
This epic is closed manually once all children are done.
The core problem: one knob, four possible meanings
There are two independent axes to a "size limit":
| on-the-wire (compressed) | at-the-application (uncompressed) | |
|---|---|---|
| per-frame | maxFramePayloadSize (correct) |
(no knob — covered transitively) |
| per-message | (no knob — covered transitively) | maxMessagePayloadSize |
Today maxMessagePayloadSize is documented as bounding the "re-assembled
payload" (uncompressed), enforced on send against the uncompressed message,
and enforced by RawSocket against the (uncompressed, no-compression) wire
message — but on the WebSocket receive path (Hybi/v13) it is enforced against
the compressed frame length, before inflation. A tiny compressed frame can
therefore inflate past the configured limit and reach the application. Hixie
(v0) already accounts uncompressed bytes correctly; Hybi is the outlier.
Agreed design (see child issues for detail)
- D1 — semantic anchor.
maxMessagePayloadSize= maximum size of a single
serialized WAMP message (transport payload), measured uncompressed — i.e.
before compression on send, after decompression on receive. This is already
true on send, on RawSocket, and on Hixie receive; we bring Hybi receive in
line. Default stays0(unlimited), so no existing deployment changes. - D2 — two knobs, correctly defined.
maxMessagePayloadSize(per-message,
uncompressed) +maxFramePayloadSize(per-frame, wire). The other two matrix
cells are covered transitively (enforcing the uncompressed per-message cap
during inflation also bounds a single-frame bomb; bounding uncompressed
transitively bounds accepted wire bytes). We deliberately do not add more
knobs — the existing two, defined correctly, are sufficient and less confusing. - Enforcement site. Backend-agnostic, at the inflation site in
onFrameData, so it works identically in message mode and streaming
(frame-based) mode (which differ only by whichonMessage*callbacks a
consumer overrides), and independently of the compression backend
(deflate / snappy / bzip2 / brotli).
Children (dependency-ordered)
- https://github.com/crossbario/autobahn-python/issues/1908
- https://github.com/crossbario/autobahn-python/issues/1909
- https://github.com/crossbario/autobahn-python/issues/1910
- https://github.com/crossbario/autobahn-python/issues/1911
- https://github.com/crossbario/crossbar/issues/2250
Cross-references
- Security advisory: GHSA-hxp9-w8x3-p566 (public; developed in the open).
- Related class: CVE-2016-10544 (ws / Node.js — same compressed-vs-decompressed
boundary mistake). - Ties into the Track T testing epic (parametrized both-backend / both-transport
/ multi-codec size-limit coverage; Crossbar zip-bomb functest into CI).
This work is being completed with AI assistance (Claude Code); all commits are
human-reviewed per AI_POLICY.md.
- Ngôn ngữ chính
- Python
- Star
- 2.5k
- Fork
- 769
- Merge trung bình
- 1 ngày 11 giờ
- Pull request đã merge (30 ngày)
- 16
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của crossbario/autobahn-python
-
CI-CD enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
crossbario/autobahn-python#1945 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug CI-CD
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
crossbario/autobahn-python#1932 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
CI-CD enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
crossbario/autobahn-python#1829 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 22/100
crossbario/autobahn-python#1985 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
crossbario/autobahn-python#1963 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của crossbario/autobahn-python
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
PolicyEngine/policyengine-us#10262 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
kellyjonbrazil/jc#788 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
`/search.json` ignores the documented `editions.sort` parameterCó thể đã có người làm @PranavD2905 đã nhận hôm nay. Đang mởAffects: Server Good First Issue Module: Solr Needs: Triage Theme: Public APIs Theme: Search
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
internetarchive/openlibrary#13989 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug P2: misleading query
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
jeffknupp/association#478 ·