Sanitizacion HTML
Sanitizacion HTML
Sección titulada «Sanitizacion HTML»Sanitizar HTML no confiable para prevenir ataques XSS. Basado en bluemonday.
La sanitizacion funciona parseando HTML y filtrandolo a traves de una politica de lista blanca. Los elementos y atributos no permitidos explicitamente son eliminados. La salida siempre es HTML bien formado.
local html = require("html")Politicas Preconfiguradas
Sección titulada «Politicas Preconfiguradas»Tres politicas integradas para casos de uso comunes:
| Politica | Caso de Uso | Permite |
|---|---|---|
new_policy | Sanitizacion personalizada | Nada (construir desde cero) |
ugc_policy | Comentarios de usuario, foros | Formato comun (p, b, i, a, listas, etc.) |
strict_policy | Extraccion de texto plano | Nada (elimina todo HTML) |
Politica Vacia
Sección titulada «Politica Vacia»Crea una politica que no permite nada. Use esto para construir una lista blanca personalizada desde cero.
local policy, err = html.sanitize.new_policy()
policy:allow_elements("p", "strong", "em")policy:allow_attrs("class"):globally()
local clean = policy:sanitize(user_input)Devuelve: Policy, error
Politica de Contenido de Usuario
Sección titulada «Politica de Contenido de Usuario»Preconfigurada para contenido generado por usuarios. Permite elementos de formato comunes.
local policy = html.sanitize.ugc_policy()
local safe = policy:sanitize('<p>Hello <strong>world</strong></p>')-- '<p>Hello <strong>world</strong></p>'
local xss = policy:sanitize('<p>Hello <script>alert("xss")</script></p>')-- '<p>Hello </p>'Devuelve: Policy, error
Politica Estricta
Sección titulada «Politica Estricta»Elimina todo HTML, devuelve solo texto plano.
local policy = html.sanitize.strict_policy()
local text = policy:sanitize('<p>Hello <b>world</b>!</p>')-- 'Hello world!'Devuelve: Policy, error
Control de Elementos
Sección titulada «Control de Elementos»Permitir Elementos
Sección titulada «Permitir Elementos»Lista blanca de elementos HTML especificos.
local policy = html.sanitize.new_policy()policy:allow_elements("p", "strong", "em", "br")policy:allow_elements("h1", "h2", "h3")policy:allow_elements("a", "img")
local result = policy:sanitize('<p>Hello <strong>world</strong></p>')-- '<p>Hello <strong>world</strong></p>'| Parámetro | Tipo | Descripción |
|---|---|---|
... | string | Nombres de etiquetas de elementos |
Devuelve: Policy
Control de Atributos
Sección titulada «Control de Atributos»Permitir Atributos
Sección titulada «Permitir Atributos»Iniciar permiso de atributos. Encadenar con on_elements() o globally().
policy:allow_attrs("href"):on_elements("a")policy:allow_attrs("src", "alt"):on_elements("img")policy:allow_attrs("class", "id"):globally()| Parámetro | Tipo | Descripción |
|---|---|---|
... | string | Nombres de atributos |
Devuelve: AttrBuilder
En Elementos Especificos
Sección titulada «En Elementos Especificos»Permitir atributos solo en elementos especificos.
policy:allow_elements("a", "img")policy:allow_attrs("href", "target"):on_elements("a")policy:allow_attrs("src", "alt", "width", "height"):on_elements("img")| Parámetro | Tipo | Descripción |
|---|---|---|
... | string | Nombres de etiquetas de elementos |
Devuelve: Policy
En Todos los Elementos
Sección titulada «En Todos los Elementos»Permitir atributos globalmente en cualquier elemento permitido.
policy:allow_attrs("class"):globally()policy:allow_attrs("id"):globally()Devuelve: Policy
Con Coincidencia de Patrón
Sección titulada «Con Coincidencia de Patrón»Validar valores de atributos contra patrón regex.
-- Solo permitir colores hex en stylelocal builder, err = policy:allow_attrs("style"):matching("^color:#[0-9a-fA-F]{6}$")if err then return nil, errendbuilder:on_elements("span")
policy:sanitize('<span style="color:#ff0000">Red</span>')-- '<span style="color:#ff0000">Red</span>'
policy:sanitize('<span style="background:red">Bad</span>')-- '<span>Bad</span>'| Parámetro | Tipo | Descripción |
|---|---|---|
pattern | string | Patrón regex |
Devuelve: AttrBuilder, error
Seguridad de URL
Sección titulada «Seguridad de URL»URLs Estandar
Sección titulada «URLs Estandar»Habilitar manejo de URL con valores predeterminados de seguridad.
policy:allow_elements("a")policy:allow_attrs("href"):on_elements("a")policy:allow_standard_urls()Devuelve: Policy
Esquemas de URL
Sección titulada «Esquemas de URL»Restringir que esquemas de URL estan permitidos.
policy:allow_url_schemes("https", "mailto")
policy:sanitize('<a href="https://example.com">OK</a>')-- '<a href="https://example.com">OK</a>'
policy:sanitize('<a href="javascript:alert(1)">XSS</a>')-- '<a>XSS</a>'| Parámetro | Tipo | Descripción |
|---|---|---|
... | string | Esquemas permitidos |
Devuelve: Policy
URLs Relativas
Sección titulada «URLs Relativas»Permitir o denegar URLs relativas.
policy:allow_relative_urls(true)
policy:sanitize('<a href="/page">Link</a>')-- '<a href="/page">Link</a>'| Parámetro | Tipo | Descripción |
|---|---|---|
allow | boolean | Permitir URLs relativas |
Devuelve: Policy
Requerir URLs Parseables
Sección titulada «Requerir URLs Parseables»Rechaza URLs que no se pueden parsear correctamente. Con true, las URLs de atributos que el sanitizador HTML no puede parsear son eliminadas en lugar de pasar.
policy:require_parseable_urls(true)| Parámetro | Tipo | Descripción |
|---|---|---|
require | boolean | Requerir que las URLs sean parseables |
Devuelve: Policy
Enlaces Nofollow
Sección titulada «Enlaces Nofollow»Agregar rel="nofollow" a todos los enlaces. Previene spam SEO.
policy:allow_attrs("href", "rel"):on_elements("a")policy:require_nofollow_on_links(true)
policy:sanitize('<a href="https://example.com">Link</a>')-- '<a href="https://example.com" rel="nofollow">Link</a>'| Parámetro | Tipo | Descripción |
|---|---|---|
require | boolean | Agregar nofollow |
Devuelve: Policy
Enlaces Noreferrer
Sección titulada «Enlaces Noreferrer»Agregar rel="noreferrer" a todos los enlaces. Previene fuga de referrer.
policy:require_noreferrer_on_links(true)| Parámetro | Tipo | Descripción |
|---|---|---|
require | boolean | Agregar noreferrer |
Devuelve: Policy
Enlaces Externos en Nueva Pestana
Sección titulada «Enlaces Externos en Nueva Pestana»Agregar target="_blank" a URLs completamente calificadas.
policy:allow_attrs("href", "target"):on_elements("a")policy:add_target_blank_to_fully_qualified_links(true)
policy:sanitize('<a href="https://example.com">Link</a>')-- '<a href="https://example.com" target="_blank">Link</a>'| Parámetro | Tipo | Descripción |
|---|---|---|
add | boolean | Agregar target blank |
Devuelve: Policy
Metodos de Conveniencia
Sección titulada «Metodos de Conveniencia»Permitir Imagenes
Sección titulada «Permitir Imagenes»Permitir <img> con atributos estandar.
policy:allow_images()
policy:sanitize('<img src="photo.jpg" alt="Photo">')-- '<img src="photo.jpg" alt="Photo">'Devuelve: Policy
Permitir Imagenes Data URI
Sección titulada «Permitir Imagenes Data URI»Permitir imagenes base64 incrustadas.
policy:allow_elements("img")policy:allow_attrs("src"):on_elements("img")policy:allow_data_uri_images()
policy:sanitize('<img src="data:image/png;base64,iVBORw...">')-- '<img src="data:image/png;base64,iVBORw...">'Devuelve: Policy
Permitir Listas
Sección titulada «Permitir Listas»Permitir elementos de lista: ul, ol, li, dl, dt, dd.
policy:allow_lists()
policy:sanitize('<ul><li>Item 1</li><li>Item 2</li></ul>')-- '<ul><li>Item 1</li><li>Item 2</li></ul>'Devuelve: Policy
Permitir Tablas
Sección titulada «Permitir Tablas»Permitir elementos de tabla: table, thead, tbody, tfoot, tr, td, th, caption.
policy:allow_tables()
policy:sanitize('<table><tr><td>Cell</td></tr></table>')-- '<table><tr><td>Cell</td></tr></table>'Devuelve: Policy
Permitir Atributos Estandar
Sección titulada «Permitir Atributos Estandar»Permitir atributos comunes: id, class, title, dir, lang.
policy:allow_elements("p")policy:allow_standard_attributes()
policy:sanitize('<p id="intro" class="text" title="Introduction">Hello</p>')-- '<p id="intro" class="text" title="Introduction">Hello</p>'Devuelve: Policy
Sanitizar
Sección titulada «Sanitizar»Aplicar politica a string HTML.
local policy = html.sanitize.ugc_policy()policy:require_nofollow_on_links(true)
local dirty = '<p>Hello</p><script>alert("xss")</script>'local clean = policy:sanitize(dirty)-- '<p>Hello</p>'| Parámetro | Tipo | Descripción |
|---|---|---|
html | string | HTML a sanitizar |
Devuelve: string
Errores
Sección titulada «Errores»| Condición | Tipo | Reintentable |
|---|---|---|
| Patrón regex invalido | errors.INVALID | no |
Consulte Manejo de Errores para trabajar con errores.