Skip to content

fix: seguridad, accesibilidad y cleanup frontend#378

Open
devsart95 wants to merge 3 commits intomelizeche:devfrom
devsart95:dev
Open

fix: seguridad, accesibilidad y cleanup frontend#378
devsart95 wants to merge 3 commits intomelizeche:devfrom
devsart95:dev

Conversation

@devsart95
Copy link
Copy Markdown

Resumen

Auditoría completa de seguridad y accesibilidad del proyecto con fixes implementados en 3 áreas:

Seguridad backend

  • Remover phone de serializers REST y search_fields (datos personales expuestos vía API pública)
  • Rate limiting: 100/h anon, 300/h user
  • ALLOWED_HOSTS via env (era ['*']), remover DEBUG_PROPAGATE_EXCEPTIONS
  • Headers de seguridad: HSTS, SESSION/CSRF_COOKIE_SECURE, X_FRAME_OPTIONS=DENY
  • Timeout en Nominatim (5s) + try/except en org/models.py (3 modelos sin manejo de errores)
  • Fix api_settings no importado en core/api.py
  • Fix search_fields en org/api.py (title no existe en DonationCenter)
  • Fix BaseResource.save() accedía a self.phone sin tenerlo
  • Fix device.save(device)device.save() en middleware

Seguridad frontend

  • Sanitizar innerHTML en popups de mapas (XSS almacenado) y respuesta de geocoding externo
  • encodeURIComponent en URL de API de geocoding
  • Prevención de doble submit en formularios de creación
  • Remover console.log con coordenadas en producción

Accesibilidad y performance

  • lang="es" en <html>
  • Alt text en todas las imágenes
  • <p onclick><button type="button"> con aria-label en categorías
  • Fix class duplicado en login.html
  • Remover borde debug verde en listas
  • defer en scripts bloqueantes (fontawesome, bulmajs, moment)
  • Aria-labels en loading indicators, inputs de ciudades, botones de cerrar
  • role="search" en dropdowns (era role="menu")
  • .catch() en fetch para evitar spinner congelado si API falla

Test plan

  • Verificar que la API /api/v1/ no retorna phone en responses
  • Verificar que el rate limiting funciona (100 requests/hora anon)
  • Verificar formularios de creación (solicitud + donación) con submit
  • Verificar que los popups de mapa muestran datos correctamente
  • Verificar que scripts cargan correctamente con defer
  • Verificar accesibilidad con screen reader o Lighthouse

- Remover phone de serializers REST y search_fields (core + org)
- Agregar rate limiting (100/h anon, 300/h user) y permisos explícitos
- ALLOWED_HOSTS via env (no más wildcard), remover DEBUG_PROPAGATE_EXCEPTIONS
- Headers de seguridad: HSTS, SESSION/CSRF_COOKIE_SECURE, X_FRAME_OPTIONS=DENY
- Timeout=5 en Nominatim + try/except en org/models.py (3 modelos)
- Fix import api_settings en core/api.py
- Fix search_fields org/api.py (title no existe en DonationCenter → name)
- Fix BaseResource.save() accedía a self.phone sin tenerlo
- Fix device.save(device) → device.save() en middleware
- Actualizar .env.example con nuevas variables
- Sanitizar innerHTML en popups de list.js y list-donation.js (sanitizeHTML)
- Exportar sanitizeHTML como window global desde table-view.js
- Sanitizar geocoding API response en create.html (escapeHTML)
- encodeURIComponent en URL de geocoding externo
- parseInt en pk de popups para evitar inyección en href
- Prevención de doble submit: onsubmit en ambos formularios de creación
- Remover console.log con coordenadas de producción
- Agregar lang="es" a <html> en base.html
- Alt text en todas las imágenes (logo, footer, details, phone)
- Convertir <p onclick> a <button type="button"> con aria-label en categorías
- Fix login.html: class duplicado Bulma+Bootstrap → solo Bulma
- Remover borde debug verde en list.html y donation_center/list.html
- Agregar defer a scripts bloqueantes (fontawesome, bulmajs, moment)
- Aria-labels en loading indicator, cities input, delete buttons
- role="search" en dropdowns de ciudades (era role="menu")
- Error handling en fetch: catch para ocultar spinner si API falla
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