Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Warden skill: detect unsafe URI rendering in HTML templates

Abierto
#843 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
typescript
Área
security, tooling

Línea de trabajo

Comienza con PR #842 y la allow-list de sanitizeHrefURL para comprender la vulnerabilidad corregida y el manejo esperado de URI. Inspecciona las reglas existentes de Warden y la configuración de ESLint; después, determina cómo se pueden detectar los literales de plantilla o las concatenaciones que llegan a href, src o action. Se considerará terminado cuando el mecanismo de cumplimiento elegido informe de sinks inseguros no validados en todo el código base y cubra los patrones propuestos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

PR #842 fixed a stored XSS in the OAuth approval dialog where client_uri, policy_uri, and tos_uri fields were rendered as clickable href attributes without validating the URI scheme. javascript: URIs bypassed HTML escaping entirely. The fix added an allow-list (sanitizeHrefURL) restricting schemes to http/https.

This class of bug — untrusted string → href without scheme validation — is easy to miss in review and should be caught automatically via a Warden rule.

Current behavior

No static analysis or Warden rule exists to flag patterns like:

// dangerous: href value from external input without scheme validation
`<a href="${uri}">`

Gap

HTML-escaping does not protect against javascript: URIs. Any place where user-controlled or API-sourced strings are interpolated directly into href, src, or action attributes is a latent XSS vector that code review can silently miss.

Options

  • Warden semgrep rule — pattern-match template literals or string concatenation that feeds into href/src/action without passing through an allow-list sanitizer. Flag for human review.
  • ESLint plugin (e.g. eslint-plugin-no-unsanitized) — enforce at lint time in CI; blocks merges rather than async Warden alerts.
  • Both — Warden for existing codebase sweep + ESLint for ongoing enforcement.

Recommendation

Ship a Warden rule first for a broad sweep across the codebase, then layer in an ESLint rule (or extend the existing config) so new instances are caught at PR time before merge.

Action taken on behalf of David Cramer.

Lenguaje dominante
TypeScript
Estrellas
938
Forks
166
Merge medio
1 d 5 h
PR fusionados (30 d)
172

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de getsentry/toolkit

Todos los issues de getsentry/toolkit

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.