Skip to content

fix(security): rate-limit the health probe and public share page - #118

Merged
rubenvdlinde merged 1 commit into
developmentfrom
fix/public-endpoint-rate-limits
Aug 14, 2026
Merged

fix(security): rate-limit the health probe and public share page#118
rubenvdlinde merged 1 commit into
developmentfrom
fix/public-endpoint-rate-limits

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

This app's last unthrottled #[PublicPage] endpoints. It now reports zero.

Both of these apps were missed by the original fleet sweep, for opposite reasons worth recording:

  • launchpad — an early check reported no git repository, so it was written off as a deployed copy and excluded from every later measurement. It's a normal checkout on development. The app that was already the fleet's best at brute-force protection (PublicShareService is the only service-level IThrottler implementation, and this whole sweep copied its shape) was the one left with unthrottled endpoints.
  • nldesign — recorded as having zero public endpoints, from the same inflated grep that produced the discredited 223 figure. It counted docblock mentions, and for nldesign it happened to land on nothing. A number can be wrong in the reassuring direction too.

No brute-force counters here: nothing takes a guessable credential. The share token is checked by PublicShareController, which already registers failed attempts; the page is only the shell hosting it.

Not verified locally — neither app has vendor/bin/phpunit in this environment. Lint-clean only; CI is the first real run.

Completes the ADR-081/082 sweep (ConductionNL/hydra#554).

launchpad's last two unthrottled #[PublicPage] endpoints. It now reports
ZERO.

These were MISSED by the fleet sweep, and the reason is worth recording: an
early check reported launchpad as having no git repository, so it was written
off as a deployed copy and excluded from every later measurement. It is a
normal checkout on development. The app that was already the fleet's BEST at
brute-force protection -- PublicShareService is the only service-level
IThrottler implementation in the fleet, and the whole sweep copied its shape
-- was the one left with unthrottled endpoints.

No brute-force counter on either. The share TOKEN is checked by
PublicShareController, which already registers failed attempts through
PublicShareService; publicShare() is only the shell that hosts it. 120/60 on
both, deliberately generous -- a recipient reloading a shared dashboard must
not be what trips it.

NOT verified locally: launchpad has no vendor/bin/phpunit in this
environment, so there is no suite to run. Lint-clean only; CI is the first
real run.
@rubenvdlinde
rubenvdlinde merged commit f404ccb into development Aug 14, 2026
34 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/launchpad @ 0502911

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
format
composer ✅ 104/104
npm ✅ 536/536
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright
Hydra gates

Quality workflow — 2026-08-14 15:36 UTC

Download the full PDF report from the workflow artifacts.

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