Введение
При возврате HTML (стандартный тип ответа в Flask), любые значения, предоставленные пользователем, отображаемые в выводе, должны быть экранированы, чтобы защититься от атак инъекции. В этом практическом занятии вы узнаете, как использовать escape для этого. Также HTML-шаблоны, отрендеренные с использованием Jinja, представленные позже, сделают это автоматически. В настоящее время вы можете просто использовать escape для этого вручную.
Экранирование
В этом шаге вы узнаете, как использовать escape для защиты от атак инъекции.
- Откройте файл
html_escaping.pyи сначала импортируйте классFlaskиescape.
from flask import Flask
from markupsafe import escape
- Затем создайте экземпляр класса
Flask.
app = Flask(__name__)
- Затем мы используем декоратор
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}"
- Создайте точку входа
mainдля запуска приложения Flask на порту 5000 с включенным режимом отладки.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- Чтобы запустить приложение, сначала используйте следующие команды для запуска приложения Flask в терминале:
python3 html_escaping.py
Затем откройте вкладку "Web 5000", расположенную в верхней части интерфейса, обновите страницу, и вы должны увидеть сообщение:

- Теги
<script>безопасно отображаются как текст и не выполняются как JavaScript, демонстрируя предотвращение атаки XSS.
Резюме
В этом практическом занятии мы узнали, как использовать escape для ручного экранирования ввода. Это может быть очень полезно при работе с потенциально вредоносными атаками. Позже мы узнаем, как отрендерить шаблоны с использованием Jinja, который может делать это автоматически и эффективно.



