介绍
当返回 HTML(Flask 中的默认响应类型)时,必须对输出中渲染的任何用户提供的值进行转义,以防止注入攻击。在本实验中,你将学习如何使用 escape 来实现这一点。稍后介绍的 Jinja 渲染的 HTML 模板会自动执行此操作。目前,你可以手动使用 escape 来完成此操作。
当返回 HTML(Flask 中的默认响应类型)时,必须对输出中渲染的任何用户提供的值进行转义,以防止注入攻击。在本实验中,你将学习如何使用 escape 来实现这一点。稍后介绍的 Jinja 渲染的 HTML 模板会自动执行此操作。目前,你可以手动使用 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 入口点,用于在端口 5000 启动 Flask 应用程序,并启用调试模式。if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
python3 html_escaping.py
然后打开位于界面顶部的 "Web 5000" 标签,刷新页面,你应该会看到以下消息:

<script> 标签被安全地显示为文本,而不会作为 JavaScript 执行,这展示了如何防止 XSS 攻击。在本实验中,我们学习了如何使用 escape 手动转义输入内容。这在处理潜在的有害攻击时非常有用。稍后我们将学习如何使用 Jinja 渲染模板,它可以自动且高效地完成这一操作。