Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Warden skill: detect unsafe URI rendering in HTML templates

Aperta
#843 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
typescript
Ambito
security, tooling

Direzione di ricerca

Inizia con PR #842 e la allow-list di sanitizeHrefURL per comprendere la vulnerabilità risolta e la gestione prevista degli URI. Esamina le regole Warden esistenti e la configurazione di ESLint, quindi determina come rilevare i template literal o le concatenazioni che raggiungono href, src o action. Il lavoro è completato quando il meccanismo di enforcement scelto segnala i sink non validati e non sicuri nell'intera codebase e copre i pattern proposti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
TypeScript
Stelle
938
Fork
166
Merge medio
1g 7h
PR unite (30g)
156

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di getsentry/toolkit

Tutte le issue di getsentry/toolkit

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.