Безопасная рендеринг HTML с использованием Flask

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

При возврате HTML (стандартный тип ответа в Flask), любые значения, предоставленные пользователем, отображаемые в выводе, должны быть экранированы, чтобы защититься от атак инъекции. В этом практическом занятии вы узнаете, как использовать escape для этого. Также HTML-шаблоны, отрендеренные с использованием Jinja, представленные позже, сделают это автоматически. В настоящее время вы можете просто использовать escape для этого вручную.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/AdvancedTopicsGroup -.-> python/decorators("Decorators") subgraph Lab Skills python/strings -.-> lab-148875{{"Безопасная рендеринг HTML с использованием Flask"}} python/using_packages -.-> lab-148875{{"Безопасная рендеринг HTML с использованием Flask"}} python/decorators -.-> lab-148875{{"Безопасная рендеринг HTML с использованием Flask"}} end

Экранирование

В этом шаге вы узнаете, как использовать escape для защиты от атак инъекции.

  1. Откройте файл html_escaping.py и сначала импортируйте класс Flask и escape.
from flask import Flask
from markupsafe import escape
  1. Затем создайте экземпляр класса Flask.
app = Flask(__name__)
  1. Затем мы используем декоратор route() для создания маршрута / с функцией представления, называемой escaping. В функции определите фрагмент кода JavaScript и используйте escape, чтобы отобразить его как текст, экранируя любые символы, которые имеют особые смыслы в HTML.
@app.route('/')
def escaping():
    input = "<script>alert('XSS attack');</script>"
    escaped_input = escape(input)
    return f"User input: {escaped_input}"
  1. Создайте точку входа main для запуска приложения Flask на порту 5000 с включенным режимом отладки.
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)
  1. Чтобы запустить приложение, сначала используйте следующие команды для запуска приложения Flask в терминале:
python3 html_escaping.py

Затем откройте вкладку "Web 5000", расположенную в верхней части интерфейса, обновите страницу, и вы должны увидеть сообщение:
XSS attack prevention example

  • Теги <script> безопасно отображаются как текст и не выполняются как JavaScript, демонстрируя предотвращение атаки XSS.

Резюме

В этом практическом занятии мы узнали, как использовать escape для ручного экранирования ввода. Это может быть очень полезно при работе с потенциально вредоносными атаками. Позже мы узнаем, как отрендерить шаблоны с использованием Jinja, который может делать это автоматически и эффективно.