Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
bluemonday — bluemonday: un veloce sanitizer HTML in golang (ispirato all'OWASP Java HTML Sanitizer) per ripulire il contenuto generato dagli utenti da XSS | Kitploit
Strumenti/GitHubGitHub/microcosm-cc/bluemonday
Strumenti DifensiviAnalisi StaticaAnalisi delle VulnerabilitàAnalisi del CodiceSicurezza WebSicurezza delle API
GitHubmicrocosm-cc/bluemonday

bluemonday

bluemonday: un veloce sanitizer HTML in golang (ispirato all'OWASP Java HTML Sanitizer) per ripulire il contenuto generato dagli utenti da XSS

Vedi Repository
3.7k195221 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

bluemonday GoDoc Sourcegraph

bluemonday è un sanitizzatore HTML implementato in Go. È veloce e altamente configurabile.

bluemonday prende in input contenuti generati da utenti non fidati e restituisce HTML che è stato sanitizzato rispetto a una whitelist di elementi e attributi HTML approvati, in modo da poter includere tranquillamente il contenuto nella tua pagina web.

Se accetti contenuti generati dagli utenti e il tuo server usa Go, hai bisogno di bluemonday.

La policy predefinita per i contenuti generati dagli utenti (bluemonday.UGCPolicy().Sanitize()) trasforma questo:

Hello <STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>World

In un innocuo:

Hello World

E trasforma questo:

<a href="javascript:alert('XSS1')" onmouseover="alert('XSS2')">XSS<a>

In questo:

XSS

Pur continuando a permettere questo:

<a href="http://www.google.com/">
  <img src="https://ssl.gstatic.com/accounts/ui/logo_2x.png"/>
</a>

Di passare quasi inalterato (ha guadagnato un rel="nofollow, che è positivo per i contenuti generati dagli utenti):

<a href="http://www.google.com/" rel="nofollow">
  <img src="https://ssl.gstatic.com/accounts/ui/logo_2x.png"/>
</a>

Protegge i siti da attacchi XSS. Ci sono molti vettori per un attacco XSS e il modo migliore per mitigare il rischio è sanitizzare l'input utente rispetto a una lista nota di elementi e attributi HTML sicuri.

Dovresti sempre eseguire bluemonday dopo qualsiasi altra elaborazione.

Se usi blackfriday o Pandoc, bluemonday dovrebbe essere eseguito dopo questi passaggi. Questo garantisce che nessun HTML insicuro venga introdotto successivamente nel tuo processo.

bluemonday è fortemente ispirato sia dall'OWASP Java HTML Sanitizer che dall'HTML Purifier.

Riepilogo tecnico

Basato su whitelist: devi costruire una policy che descriva gli elementi e gli attributi HTML da permettere (e i pattern regexp degli attributi), oppure usare una delle policy fornite che rappresentano buoni valori predefiniti.

La policy contenente la whitelist viene applicata utilizzando un parser rapido, non validante, forward-only e basato su token, implementato nella libreria Go net/html dal team principale di Go.

Ci aspettiamo di ricevere HTML ben formattato (elementi di chiusura per ogni elemento aperto applicabile, nidificati correttamente) e quindi non ci concentriamo sulla riparazione di HTML mal nidificato o incompleto. Ci concentriamo semplicemente sull'assicurare che qualunque elemento esista sia descritto nella whitelist della policy e che attributi e link siano sicuri per l'uso nella tua pagina web. Vale il GIGO e se gli fornisci HTML scadente, bluemonday non ha il compito di capire come renderlo di nuovo buono.

È pronto per la produzione?

Sì

Stiamo usando bluemonday in produzione dopo essere migrati dall'ampio e testato OWASP Java HTML Sanitizer.

Stiamo superando la nostra estesa suite di test (inclusi i test AntiSamy e test per qualsiasi problema segnalato). Controlla eventuali problemi irrisolti per vedere se qualcosa potrebbe essere un blocco per te.

Accogliamo con favore pull request e issue per aiutarci a garantire di offrire una protezione completa contro vari attacchi tramite contenuti generati dagli utenti.

Utilizzo

Installa usando go get github.com/microcosm-cc/bluemonday

Poi chiamalo:

package main

import (
	"fmt"

	"github.com/microcosm-cc/bluemonday"
)

func main() {
	// Fallo una volta per ogni policy unica e usa la policy per tutta la durata del programma
	// La creazione/modifica della policy non è sicura da usare in più goroutine
	p := bluemonday.UGCPolicy()

	// La policy può poi essere usata per sanitizzare molti input ed è sicuro usarla in più goroutine
	html := p.Sanitize(
		`<a onblur="alert(secret)" href="http://www.google.com">Google</a>`,
	)

	// Output:
	// <a href="http://www.google.com" rel="nofollow">Google</a>
	fmt.Println(html)
}

Offriamo tre modi per chiamare Sanitize:

p.Sanitize(string) string
p.SanitizeBytes([]byte) []byte
p.SanitizeReader(io.Reader) bytes.Buffer

Se sei ossessionato dalle prestazioni, p.SanitizeReader(r).Bytes() restituirà un []byte senza eseguire alcun casting non necessario degli input o output. Tuttavia, la differenza è così trascurabile che non dovresti mai preoccupartene.

Puoi creare le tue policy:

package main

import (
	"fmt"

	"github.com/microcosm-cc/bluemonday"
)

func main() {
	p := bluemonday.NewPolicy()

	// Richiede che gli URL siano analizzabili da net/url.Parse e siano:
	//   mailto: http:// o https://
	p.AllowStandardURLs()

	// Permettiamo solo <p> e <a href="">
	p.AllowAttrs("href").OnElements("a")
	p.AllowElements("p")

	html := p.Sanitize(
		`<a onblur="alert(secret)" href="http://www.google.com">Google</a>`,
	)

	// Output:
	// <a href="http://www.google.com">Google</a>
	fmt.Println(html)
}

Forniamo due policy predefinite:

  1. bluemonday.StrictPolicy() che può essere considerata equivalente alla rimozione di tutti gli elementi HTML e dei loro attributi, poiché non ha nulla nella sua whitelist. Un esempio di scenario d'uso potrebbero essere i titoli di post di blog in cui non ci si aspetta affatto tag HTML e, se ci sono, gli elementi e il contenuto degli elementi dovrebbero essere rimossi. Questa è una policy molto restrittiva.
  2. bluemonday.UGCPolicy() che permette un'ampia selezione di elementi e attributi HTML sicuri per contenuti generati dagli utenti. Nota che questa policy non permette iframe, object, embed, style, script, ecc. Un esempio di scenario d'uso potrebbero essere i corpi di post di blog in cui ci si aspetta una varietà di formattazione insieme alla possibilità di TABLE e IMG.

Costruzione della policy

L'essenza della costruzione di una policy è determinare quali elementi e attributi HTML siano considerati sicuri per il tuo scenario. OWASP fornisce un cheat sheet per la prevenzione XSS per aiutare a spiegare i rischi, ma essenzialmente:

  1. Evita qualsiasi cosa diversa dagli elementi HTML standard
  2. Evita elementi script, style, iframe, object, embed, base che consentono l'esecuzione di codice da parte del client o l'inclusione di contenuti di terze parti che possono eseguire codice
  3. Evita qualsiasi cosa diversa da attributi HTML semplici con valori corrispondenti a un regexp

In pratica, dovresti essere in grado di descrivere quale HTML va bene per il tuo scenario. Se non hai fiducia di poter descrivere la tua policy, considera l'uso di una delle policy fornite, come bluemonday.UGCPolicy().

Per creare una nuova policy:

p := bluemonday.NewPolicy()

Per aggiungere elementi a una policy, aggiungi semplicemente gli elementi:

p.AllowElements("b", "strong")

Oppure usando un regex:

Nota: se un elemento viene aggiunto per nome come sopra, qualsiasi regex corrispondente verrà ignorato

Si raccomanda anche di assicurarsi che più pattern non si sovrappongano, poiché l'ordine di esecuzione non è garantito e potrebbe portare ad alcune regole mancate.

p.AllowElementsMatching(regex.MustCompile(`^my-element-`))
Scarica lo strumento