介绍
当返回 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)
- 要运行应用程序,首先使用以下命令在终端中启动 Flask 应用程序:
python3 html_escaping.py
然后打开位于界面顶部的 "Web 5000" 标签,刷新页面,你应该会看到以下消息:

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



