Introdução
Ao retornar HTML (o tipo de resposta padrão no Flask), quaisquer valores fornecidos pelo usuário renderizados na saída devem ser escapados para proteger contra ataques de injeção. Neste laboratório, você aprenderá como usar escape para conseguir isso. Além disso, os templates HTML renderizados com Jinja, introduzidos posteriormente, farão isso automaticamente. Por enquanto, você pode simplesmente usar escape para fazer isso manualmente.
Escape (Escapamento)
Nesta etapa, você aprenderá como usar escape para obter proteção contra ataques de injeção.
- Abra o arquivo
html_escaping.pye, primeiro, importe a classeFlaskeescape.
from flask import Flask
from markupsafe import escape
- Em seguida, crie uma instância da classe
Flask.
app = Flask(__name__)
- Então, usamos o decorador
route()para criar uma rota/com uma função de visualização chamadaescaping. Na função, defina um trecho de código JavaScript e useescapepara renderizá-lo como texto, escapando quaisquer caracteres que tenham significados especiais em HTML.
@app.route('/')
def escaping():
input = "<script>alert('XSS attack');</script>"
escaped_input = escape(input)
return f"User input: {escaped_input}"
- Criando um ponto de entrada
maindo script para iniciar a aplicação Flask na porta 5000, habilitando o modo de depuração.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- Para executar a aplicação, primeiro use os seguintes comandos para iniciar a aplicação Flask no terminal:
python3 html_escaping.py
Em seguida, abra a aba "Web 5000" localizada no topo da interface, atualize a página e você deverá ver a mensagem:

- As tags
<script>são exibidas com segurança como texto sem serem executadas como JavaScript, demonstrando a prevenção de um ataque XSS.
Resumo
Neste laboratório, aprendemos como usar escape para escapar manualmente a entrada. Isso pode ser muito útil ao lidar com ataques potencialmente prejudiciais. Mais tarde, aprenderemos como renderizar templates com Jinja, que pode fazer isso automaticamente e de forma eficiente.



