SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
06.04.2025

Convertendo HTML em Texto Seguro em Python: html.escape()

Resposta Rápida

Priorize a segurança: use a função do Python html.escape() para escapar o código HTML. Isso ajuda a prevenir problemas de injeção de HTML.

import html
safe_html = html.escape("<script>alert('x')</script>")
# safe_html: &lt;script&gt;alert('x')&lt;/script&gt;

Aumentando a Proteção: Trabalhando com Aspas e Caracteres ASCII

Ao lidar com atributos HTML, definir o parâmetro quote=True ajuda a evitar problemas com aspas duplas padrão ("), convertendo-as em &quot; seguro.

import html
safe_attribute = html.escape('"Olá, mundo!"', quote=True)
# safe_attribute: &quot;Olá, mundo!&quot;

Se você encontrar caracteres fora do intervalo ASCII, pode reencodificá-los da seguinte forma:

data = "© 2023 StackExchange"
safe_data = data.encode('ascii', 'xmlcharrefreplace')
# safe_data: b'&#169; 2023 StackExchange'

Ao trabalhar com conteúdo Unicode, os dados devem ser decodificados primeiro antes de serem escapados.

Uma Compreensão Mais Profunda: Escapar vs. Codificar

É importante distinguir:

  • Escapar: isso é quando você toma medidas por motivos de segurança.
  • Codificar: isso é mudar a forma de uma mensagem para compatibilidade.

Certifique-se de que a codificação do seu documento corresponda à usada em html.escape(). Isso torna seu código realmente confiável.

Visualização

Cesta de Dados 🧺:
| <b>Sanduíche de Manteiga de Amendoim e Geleia</b> | <script>Ataque de Formigas</script> | 🍇 Uvas |

E se protegermos essa cesta de dados com html.escape() do Python?

import html
safe_basket = html.escape(raw_data_basket)

Como resultado, teremos:

Cesta Segura 🧺⛓️:
| &lt;b&gt;Sanduíche de Manteiga de Amendoim e Geleia&lt;/b&gt; | &lt;script&gt;Ataque de Formigas&lt;/script&gt; | 🍇 Uvas |

Nenhum inseto irá perturbar seu tranquilo piquenique de dados!

Python 3.2+ e o cgi.escape "Degradado"

Na era do Python 3.2+, use html.escape(). Deixe a função depreciada cgi.escape() no passado. Aqui está uma ilustração:

# cgi.escape() - abordagem depreciada
import cgi
escaped_str = cgi.escape("<b>deprecado</b>")

# html.escape() - abordagem moderna
import html
escaped_str = html.escape("<b>recomendado</b>")

Escapando URLs: A Liderança do urllib

Para escapar URLs, o urllib é o mais adequado, convertendo URLs em um formato seguro por meio da codificação de elementos HTML.

from urllib.parse import quote
safe_url = quote("<Olá & Mundo>")
# safe_url: %3COl%C3%A1%20%26%20Mundo%3E

A Regra de Segurança Essencial com MarkupSafe

Se você precisa de confiabilidade extra, use MarkupSafe. Ele lida efetivamente com sobrecarga de métodos e template.

from markupsafe import escape
escaped_html = escape("<Isto é seguro & estável>")
# escaped_html: &lt;Isto é seguro &amp; estável&gt;

MarkupSafe é uma ferramenta eficiente que pode ser personalizada de acordo com suas necessidades, explorando a documentação.

Manipulando Caracteres Não-ASCII: A Importância de Escolher a Codificação Certa

A regra principal é escolher a codificação correta. Isso se torna seu refúgio confiável ao trabalhar com caracteres não-ASCII:

data = "Crème brûlée"
safe_html = html.escape(data).encode('utf-8')
# safe_html: b'Crème brûlée'

A precisão desempenha um papel significativo. Verifique a especificação de codificação nos cabeçalhos para garantir a exatidão na codificação.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!