浏览代码

156: Services-endpoint staat veel te wijd open, met exacte uitvinklijst

Live getest op productie: node/<nid>.json geeft anoniem 200 met 46 velden,
inclusief name (de inlognaam van de auteur). De app roept node/* nergens aan.
Ook system, taxonomy_term, taxonomy_vocabulary, file, geocoder en 12 van de 14
user-methodes staan aan zonder dat de app ze gebruikt.

Daarnaast: Drupal waarschuwt 11x dat de views-resource displays zonder access
control exposeert. Beperken via View Resource Settings tot de vijf views die de
app echt opvraagt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 9 小时之前
父节点
当前提交
16f97651ef
共有 1 个文件被更改,包括 61 次插入0 次删除
  1. 61 0
      TASKS.md

+ 61 - 0
TASKS.md

@@ -884,6 +884,67 @@ Bob's stuk.** De loginpagina zelf is geverifieerd tot aan het invoerveld.
   drawer én de data-deletion-URL voor Play) en `/nl/support/privacybeleid`.
 - **`devbob` staat niet meer in de levende app-code** (alleen in dode kopieën).
 
+### 🔴 156 · Services-endpoint `flutterdrup` staat veel te wijd open · Eigenaar: Bob
+
+**Gemeten 2026-09-19 op de resourcelijst die Bob plakte, plus live getest tegen
+productie.** De app gebruikt **24** methodes; er staan er tientallen aan die zij
+niet aanroept, waaronder schrijfoperaties.
+
+**Hard aangetoond, anoniem, zonder enige login:**
+- `GET /nl/flutterdrup/node/222338.json` -> **200**, **46 velden**, inclusief
+  `uid`, `revision_uid`, `uuid`, `log`, `status` en — het vervelendst —
+  **`name: bob`**, de inlognaam van de auteur. De app gebruikt `node/*` nergens.
+- `POST /nl/flutterdrup/system/connect.json` -> 200 (geeft alleen een anonieme
+  sessie terug; standaard Services-gedrag, geen lek, maar ook niet nodig).
+- `GET /nl/flutterdrup/user/1.json` -> 403 ✅ en
+  `taxonomy_vocabulary/getTree.json` -> `[false]` ✅ — die twee lekken niets.
+
+**Uitvinken (de app roept hier NIETS van aan):**
+
+| resource | methodes die uit kunnen |
+|---|---|
+| `node` | **alle 7** — retrieve, create, update, delete, index, files, attach_file |
+| `system` | **alle 4** — connect, get_variable, **set_variable**, **del_variable** |
+| `taxonomy_term` | **alle 6** — incl. create/update/delete |
+| `taxonomy_vocabulary` | **alle 7** — incl. create/update/delete |
+| `file` | **alle 5** — de app gebruikt `bestand_upload/upload` |
+| `geocoder` | beide |
+| `userestablishments` | index — vervangen door `mijn_horecagelegenheden` |
+| `user` | **alles BEHALVE `login` en `request_new_password`**: retrieve, create, update, delete, index, logout, token, user_pass_reset, register, cancel, password_reset, resend_welcome_email |
+
+*Geverifieerd in de export: de app roept exact twee user-endpoints aan
+(`user/login`, `user/request_new_password`) en nergens `token` of `logout`.*
+
+**Aan laten staan — dit is de volledige lijst die de app gebruikt:**
+`aanmelding_kloonbron` · `accountdelete` · `bestand_upload` · `categorieen` ·
+`entreeopties` · `evenementen` · `favorieten` (flag/unflag/is_flagged) ·
+`favorieten_agenda` · `favorieten_gemeenten` · `favorieten_horeca` ·
+`horecacategorieen` · `mijn_aanmeldingen` · `mijn_horecagelegenheden` ·
+`mijn_stadsrechten` · `plaatsen` · `plaatsen_bij_gemeente` · `stadsactiviteiten` ·
+`user` (alleen login + request_new_password) · `views` (retrieve)
+
+**De rommel-resources** (`0`, `34edfas2r`, `adfasdf`, `asdffadadf`,
+`fafadfadasdfas`, `fasdfasdfasd`, `flutterplaatsen`, `homes548446`,
+`safasdfasdfasdf`, `userfavoritescalendar`, `userfavoritescalendar345345234`, …)
+staan **ingeklapt** in de lijst, wat betekent dat er geen methode van aanstaat —
+ze doen dus niets. Opruimen mag, is geen haast.
+
+### 🔴 156b · Views-resource lekt mogelijk displays zonder access control
+
+Drupal zet zelf **11x** deze waarschuwing onder de `views`-resource:
+*"There are some views with displays that will be exposed that have no access
+control. This resource may unintentionally leak otherwise inaccessible displays
+such as panel panes and blocks."*
+
+Elke waarschuwing is één view. Nu is **elke** view via de API bereikbaar, ook
+blocks en panel panes die op de site zelf achter permissies zitten.
+
+**Fix:** tabblad **View Resource Settings** -> beperk tot de vijf views die de
+app gebruikt: `flutterflowmobiel1`, `flutterflow_events`,
+`flutterflowmobiel_establishments`, `flutterflowmobiel_establishment_info`,
+`flutterflowmobiel_establishment_events`. Geverifieerd in de export: de app
+vraagt geen enkele andere view op.
+
 ## 🚦 Bij livegang — schakelaars en opruimklussen · Eigenaar: Bob
 
 - **🆕 Twee dode API-calls in de gepubliceerde app.** `api_calls.dart` declareert