Renderização HTML Segura com Flask

PythonBeginner
Pratique Agora

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.

  1. Abra o arquivo html_escaping.py e, primeiro, importe a classe Flask e escape.
from flask import Flask
from markupsafe import escape
  1. Em seguida, crie uma instância da classe Flask.
app = Flask(__name__)
  1. Então, usamos o decorador route() para criar uma rota / com uma função de visualização chamada escaping. Na função, defina um trecho de código JavaScript e use escape para 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}"
  1. Criando um ponto de entrada main do 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)
  1. 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: XSS attack prevention example

  • 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.