Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
bluemonday — bluemonday : un assainisseur HTML rapide en golang (inspiré de l'OWASP Java HTML Sanitizer) pour nettoyer le contenu généré par les utilisateurs des XSS | Kitploit
Outils/GitHubGitHub/microcosm-cc/bluemonday
Outils DéfensifsAnalyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeSécurité WebSécurité des API
GitHubmicrocosm-cc/bluemonday

bluemonday

bluemonday : un assainisseur HTML rapide en golang (inspiré de l'OWASP Java HTML Sanitizer) pour nettoyer le contenu généré par les utilisateurs des XSS

Voir le dépôt
3.7k19522il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

bluemonday GoDoc Sourcegraph

bluemonday est un assainisseur HTML implémenté en Go. Il est rapide et hautement configurable.

bluemonday prend en entrée du contenu généré par l'utilisateur non fiable et renvoie du HTML qui a été assaini en fonction d'une liste blanche d'éléments et d'attributs HTML approuvés, afin que vous puissiez inclure ce contenu en toute sécurité dans votre page web.

Si vous acceptez du contenu généré par l'utilisateur et que votre serveur utilise Go, vous avez besoin de bluemonday.

La politique par défaut pour le contenu généré par l'utilisateur (bluemonday.UGCPolicy().Sanitize()) transforme ceci :

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

En un inoffensif :

Hello World

Et transforme ceci :

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

En ceci :

XSS

Tout en permettant toujours ceci :

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

À passer presque inchangé (il a gagné un rel="nofollow", ce qui est une bonne chose pour le contenu généré par l'utilisateur) :

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

Il protège les sites contre les attaques XSS. Il existe de nombreux vecteurs d'attaque XSS et la meilleure façon d'atténuer le risque est d'assainir les entrées utilisateur par rapport à une liste connue et sûre d'éléments et d'attributs HTML.

Vous devez toujours exécuter bluemonday après tout autre traitement.

Si vous utilisez blackfriday ou Pandoc, bluemonday doit être exécuté après ces étapes. Cela garantit qu'aucun HTML non sécurisé n'est introduit plus tard dans votre processus.

bluemonday est fortement inspiré à la fois du OWASP Java HTML Sanitizer et du HTML Purifier.

Résumé technique

Basé sur une liste blanche, vous devez soit construire une politique décrivant les éléments et attributs HTML à autoriser (et les motifs regexp des attributs), soit utiliser l'une des politiques fournies qui représentent de bons réglages par défaut.

La politique contenant la liste blanche est appliquée à l'aide d'un analyseur rapide, non validant, en avant uniquement, basé sur des jetons, implémenté dans la bibliothèque Go net/html par l'équipe centrale de Go.

Nous nous attendons à recevoir du HTML bien formaté (éléments fermants pour chaque élément ouvrant applicable, imbrication correcte) et nous ne nous concentrons donc pas sur la réparation d'un HTML mal imbriqué ou incomplet. Nous nous concentrons simplement sur le fait que tous les éléments qui existent sont décrits dans la liste blanche de la politique et que les attributs et les liens sont sûrs pour une utilisation sur votre page web. GIGO s'applique ; si vous lui fournissez du mauvais HTML, bluemonday n'a pas pour mission de trouver comment le rendre à nouveau correct.

Est-ce prêt pour la production ?

Oui

Nous utilisons bluemonday en production après avoir migré depuis le OWASP Java HTML Sanitizer, largement utilisé et testé sur le terrain.

Nous passons notre vaste suite de tests (y compris les tests AntiSamy ainsi que des tests pour tout problème soulevé). Vérifiez s'il y a des problèmes non résolus pour voir si quelque chose peut vous bloquer.

Nous invitons les pull requests et les signalements de problèmes pour nous aider à garantir une protection complète contre diverses attaques via du contenu généré par l'utilisateur.

Utilisation

Installez avec go get github.com/microcosm-cc/bluemonday

Puis appelez-le :

package main

import (
	"fmt"

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

func main() {
	// Faites cela une fois pour chaque politique unique et utilisez la politique pour la durée de vie du programme
	// La création/édition de politique n'est pas sûre à utiliser dans plusieurs goroutines
	p := bluemonday.UGCPolicy()

	// La politique peut ensuite être utilisée pour assainir beaucoup d'entrées et il est sûr d'utiliser la politique dans plusieurs goroutines
	html := p.Sanitize(
		`<a onblur="alert(secret)" href="http://www.google.com">Google</a>`,
	)

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

Nous offrons trois façons d'appeler Sanitize :

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

Si vous êtes obsédé par les performances, p.SanitizeReader(r).Bytes() renverra un []byte sans effectuer de conversion inutile des entrées ou sorties. Bien que la différence soit si négligeable que vous ne devriez jamais avoir à vous en soucier.

Vous pouvez construire vos propres politiques :

package main

import (
	"fmt"

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

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

	// Exiger que les URL soient analysables par net/url.Parse et soient soit :
	//   mailto: http:// ou https://
	p.AllowStandardURLs()

	// Nous n'autorisons que <p> et <a href="">
	p.AllowAttrs("href").OnElements("a")
	p.AllowElements("p")

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

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

Nous fournissons deux politiques par défaut :

  1. bluemonday.StrictPolicy() qui peut être considérée comme équivalente à la suppression de tous les éléments HTML et de leurs attributs car elle n'a rien dans sa liste blanche. Un exemple d'utilisation serait les titres de billets de blog où les balises HTML ne sont pas du tout attendues et si elles le sont, les éléments et le contenu des éléments doivent être supprimés. C'est une politique très stricte.
  2. bluemonday.UGCPolicy() qui autorise une large sélection d'éléments et d'attributs HTML sûrs pour le contenu généré par l'utilisateur. Notez que cette politique n'autorise pas les iframes, object, embed, styles, script, etc. Un exemple d'utilisation serait le corps de billets de blog où une variété de formatage est attendue ainsi que la possibilité de TABLEs et IMGs.

Construction de politique

L'essence de la construction d'une politique est de déterminer quels éléments et attributs HTML sont considérés comme sûrs pour votre scénario. OWASP fournit une antisèche de prévention XSS pour aider à expliquer les risques, mais essentiellement :

  1. Évitez tout ce qui n'est pas des éléments HTML standard
  2. Évitez les éléments script, style, iframe, object, embed, base qui permettent l'exécution de code par le client ou l'inclusion de contenu tiers pouvant exécuter du code
  3. Évitez tout ce qui n'est pas des attributs HTML simples avec des valeurs correspondant à une regexp

En gros, vous devez être capable de décrire quel HTML est acceptable pour votre scénario. Si vous n'êtes pas sûr de pouvoir décrire votre politique, envisagez d'utiliser l'une des politiques fournies comme bluemonday.UGCPolicy().

Pour créer une nouvelle politique :

p := bluemonday.NewPolicy()
Télécharger l’outil