Phase 2: Detailansicht
Modal, das sich bei Marker- oder Listen-Auswahl (state.selectedPlaceId) oeffnet: Titelbild/Platzhalter, vollstaendige Beschreibung, Adresse, Mini-Karte mit Positionsmarker, Oeffnungszeiten, Kosten, Altersempfehlung, Ausstattung (inkl. klar markierter negativer Werte), Hinweise fuer Familien, Website-Link. Navigation-Button zu OSM Directions. Loeschen ist bereits voll funktional (mit Bestaetigung), Bearbeiten ist als Platzhalter fuer Phase 3 markiert. Neuer Helper isSafeHttpUrl() in dom.js: nur http/https als Link- oder Bildquelle zulaessig, schuetzt vor javascript:-URLs in Fremddaten (Vorbereitung fuer KI-JSON-Import). Rendering weiterhin ausschliesslich ueber textContent/el(), kein innerHTML mit Place-Daten.
This commit is contained in:
@@ -89,7 +89,25 @@ window.EventMap.ui = window.EventMap.ui || {};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft, ob eine URL sicher als Link/Bildquelle verwendet werden darf
|
||||
* (Scheme-Whitelist: nur http/https). Schützt vor javascript:-URLs & Co.
|
||||
* in Nutzer-/KI-generierten Feldern wie place.website oder place.image.
|
||||
*/
|
||||
function isSafeHttpUrl(value) {
|
||||
if (typeof value !== 'string' || value.trim() === '') {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
const parsed = new URL(value);
|
||||
return parsed.protocol === 'http:' || parsed.protocol === 'https:';
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
EventMap.utils.el = el;
|
||||
EventMap.utils.escapeHtml = escapeHtml;
|
||||
EventMap.utils.clearChildren = clearChildren;
|
||||
EventMap.utils.isSafeHttpUrl = isSafeHttpUrl;
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user